一、字符编码表 我们知道计算机底层数据存储的都是二进制数据,而我们生活中的各种各样的数据,如何才能和计算机中存储的二进制数据对应起来呢?常见的有以下几种码表:
1. ASCII码表 老美们就把每一个字符和一个整数对应起来,就形成了一张编码表,老美他们的编码表就是ASCII表。 ASCII码表只用到了一个字节的低7位,最高位为0。也就是说ASCII码表只有128个字符。分别由0~127来对应。
2. iso-8859-1 拉丁文编码表。也是用一个字节来表示文字。用到了8位。
3. GB2312 简体中文码表。这是比较早期的中文编码表。里面大概不到6000个文字。用两个字节表示,第一个字节是负数,第二个字节可能是正数。
4. GBK GB2312不够用,所以扩容成了GBK。大概有2万个中文汉字。用两个字节表示。第一个字节是负数,第二个字节可能是正数。 只要安装了中文版操作系统,编码都是GBK的。
5. GB18030 最新的中文码表,但是现在还没有正式启用。所以还是用的GBK。
6. unicode 称为万国编码表。它里面容纳了全球所有的语言文字。它里面无论什么字,都用两个字节存储。 java中的char类型,用的就是unicode码表,所以char占用两个字节,所以char类型也可以存储汉字。 虽然java中的char类型是unicode来表示的,但是java中的字符串不是按照Unicode来表示的,字符串是按照系统默认码表来解析的。简体中文版字符串默认的码表是GBK。
7. UTF-8 基于Unicode,这个编码表做得更标准,更优化。在utf-8里面,一个字节能表示的,绝对不用两个字节表示。所以这个编码表是我们后期开发经常用到的编码表。现在的互联网技术基本都是用utf-8。
总结: 能识别中文的编码表:unicode、utf-8、GBK 对于我们开发而言,常用的编码:utf-8、GBK、iso-8859-1
二、编码和解码 编码:字符串---->数字。通过getBytes()方法。 【例1】 解码:数字---->字符串。通过new String(Byte[])来得到。 【例2】
例1:编码
例2:解码
三、汉字在不同编码表下的存储 不同的编码表,同一个汉字对应的编码是不一样的。比如: GBK编码中,一个汉字对应2个字节。比如"刘"对应的编码为"-63 -11"。【实验1】【实验2】 但是在utf-8编码中,同样是"刘"对应的编码是"-17 -69 -65 -27 -120 -104"。【实验3】【实验4】(为什么是6个字节呢?)
实验1:
在aaa.txt中存放汉字刘,显示aaa.txt为2个字节大小。运行程序读取字节,可以看到两个字节为-63、-11。
实验2:
往f.txt中输入两个字节-63,-11,打开f.txt,显示的是"刘"。
实验3: 在aaa.txt中存放汉字刘,另存为utf-8编码,显示aaa.txt为6个字节大小。运行实验1的程序读取字节,可以看到6个字节为"-17 -69 -65 -27 -120 -104"。
实验4: 通过实验2的程序往f.txt中存放6个字节"-17 -69 -65 -27 -120 -104",显示f.txt为6个字节,打开之后看到"刘"。(疑问,这个地方不应该是乱码么??)
|
字符编码
最新推荐文章于 2024-05-08 14:32:15 发布