基础知识总结:字符编码

来源:互联网 发布:java开发知识 编辑:程序博客网 时间:2024/05/29 17:51

因为数据是二进制表示的,现在存在各种各样的编码,因为计算机识别的编码与数据本身的编码不一致,就会造成乱码。

ASCII

美国规定的128个字符表示的二进制表示方法,这种方法称为ASCII码,计算机存储的最小单位是字节(8位),ASCII码的后7位表示字符本身,最高位设置为0,后7位0~127表示128个字符,ASCII码对美国够用了,但是对其他国家其他字符远远不够。

ISO 8859-1

西欧编码,这种编码也是一个字节表示一个字符,前127位与ASCII码一样,128到255表示其他的西欧字符。后来推出的Windows-1252就是在其基础上增加了一些数字表示打印字符,一般都用Windows-1252来解析了。

GB2312

主要基于7000个汉字的字符编码,不包括繁体字和特殊字,它用两个字节表示字符,最高位为1,表示汉字。如果最高位是0,则表示ASCII码。

GBK

是在GB2312的基础上增加到21000个汉字,兼容了繁体字。同样用两个字节表示。

GB18030

GB18030再GBK的基础上增加到了76000个字符,兼容了少数民族字符和日韩字符,两个字节的长度已经不能满足这种编码需求了,所以长度增加到4个字节。

Big5

针对台湾和香港的繁体字符集。


乱码是怎样产生的呢?

如果一个文件的字符编码是Windows-1252,如果用GB18030的编码格式来解析的话,就会出现乱码的现象。所以用正确的编码格式编码就可以了。

Unicode

编码跟其他编码不一样,unicode编码给世界上所有的字符都制定了统一的编号,包括110多W,所以可以通过给字符找到对应的unicode编码来找到它真正表示的字符含义,把Unicode编码对应到二级制表中就用到了UTF-32, UTF-16和UTF-8。

UTF-32用字符二进制的完整表示,就是4个字节,因为会造成空间浪费。

UTF-16使用变长自己表示,可能为两个自己可能为4个字节,常用语系统内部编码,比UTF-32节省了空间。

UTF-8就是使用变长字节表示,每个字符使用的字节个数与其Unicode编号的大小有关,编号小的使用的字节就少,编号大的使用的字节就多,使用的字节个数从1到4个不等。UTF-8字符编码兼容ASCii码,一个字符一般用3分字节表示。


所以可以通过Unicode编码实现各种编码的转换,从A编码转换到B编码,可先根据A编码格式找到A对应的映射表找到对应的unicode在通过映射表找到B的编码格式。


原创粉丝点击