0
点赞
收藏
分享

微信扫一扫

深入理解计算机编码与字符集的区别


1、编码表与字符集的区别

比如,unicode是字符集(万国码),但计算机如何存储编码(几个字节存储),这时候要用到编码规则(UTF-8)

举例:

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

utf-8中文3个字节,英文1个字节。gbk中文2个字节,英文1个字节。

2、ASCII扩展码字符和GBK混合写入文件

使用Java IO流同时将欧元符€和汉字写入文件。

FileOutputStream out = new FileOutputStream("E:/tmp/character.txt");
out.write("你好啊".getBytes("GBK"));
// 不能以这种方式写
// out.write("€".getBytes("GBK"));
out.write(128);
out.close();

将文件传到linux上之后,执行命令cat test1.txt|od -c,€会显示成200(od表示使用八进制显示),此时说明是正确的

3、Java中关于ASCII扩展码字符的处理

char c = 251; // 扩展ASCII码中字符√的编码
System.out.println(c); // û

// 扩展ASCII不是国际标准,编码为251的字符,就不是√,而是û。而√对应的unicode编码是8730,输出8730才能得到√
System.out.println((int)'√'); // 8730
System.out.println((char)8730); // √

// 输出扩展ASCII码中字符€的unicode编码
System.out.println((int)'€');
System.out.println((char)8364);

注意:java中使用unicode字符表示字符串时,是十六进制,如下代码所示。

System.out.println("\u20AC"); // €的unicode码的十六进制

针对扩展的ASCII码,不同的国家有不同的字符集,所以它并不是国际标准。


举报

相关推荐

0 条评论