`

字符集、编码

阅读更多

字符集概念

(1)字符集:可以表示的字符和字符对应计算机字节码的映射;

(2)字符编码方式:计算机中用来表示和传输如前所述字符集中映射的字节码的编码方式。对于asciigb2312等字符集,他们在传输和计算机表示时的字节码不用编码,直接用字符对应的字节码表示。但比如unicode字符集,就有多种不同的编码方式

 

ASCII

          单字节字符集,最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

 

ISO-8859系列

         为了弥补ASCII系列的不足,出现了很多各种类型的编码,为了避免混乱,ISO组织在1998年之后陆续发表了ISO-8859Latin1 - 西欧字符)系列的编码标准。其中以ISO-8859-1最为典型。ISO-8859-1覆盖了大多数西欧语言。ISO-8859系列互不兼容。

         把ISO-8859系列的字符集想象成一个:2^8 = 16 * 16 = 256个格子的棋盘,这样所有的西文字符用这样一个16×16的坐标系就基本可以覆盖全了。而英文实际上只用其中小于128的部分就够了。利用大于128部分的空间的不同定义规则形成了真对其他欧洲语言的扩展字符集:ISO-8859-2 ISO-8859-4等。

 

Unicode & UCS

           ISO组织制定通用多八位编码字符集,(Universal Multiple-Octet Coded Character Set),简称UCS,标准的编号为:ISO 10646Unicode学术学会机构制定Unicode.UnicodeISO 10646国际编码标准于19921月正式合作发展一套通用编码标准,两者相互兼容,

两者的区别在于:ISO 10646着重定义字符编码,而Unicode则在此基础上,为这些字符及编码数据提出应用的方法以及对语义数据作补充。

 

UTF-8

        互联网70%以上的信息是英文。如果连英文都用2个字节存取(UCS-2),空间浪费就太多了。所谓UTF-8就是这样一个为了提高英文存取效率的字符集转换格式:Unicode Transformation Form 8-bit form。用UTF-8,UNICODE的2字节字符用变长个(1-3个字节)表示;

特点:

1、对英文,仍然和ASCII一样用1个字节表示,这个字节的值小于128(\x80);

2、对其他语言的用一个值位于128-256之间的字节开始,再加后面紧跟的2个字节表示,一个字符一共是3个字节;

      因此,在应用中程序处理过程中所有字符都是16位(双字节),但在存取转换成字节流时使用UTF-8格式转换,对于英文字符来说和原来用ASCII方式存取时相比大小仍然是一样的,而对中文来说和原来的GB2312编码方式相比,大小为:(3字节/2字节)=1.5倍。

优点:
1、与CPU字节顺序无关, 可以在不同平台之间交流
2、容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)

3、UTF-8是一种为了方便网路传输,节省传输数量,而对Unicode的字符集的字符编号进行转换,从定长的2个字节(16进制)转换成1~3个的变长字节(2进制)表示的转换格式。
对于英文字符来说,采用UTF-8对Unicode编码转换后节省了一倍的传输成本(由定长的2个字节变长1个字节),但对于原本双字节的东亚字符来说,反而增加了成本,是原来的1.5倍

 

UTF-8的编码

Unicode中文“艺”字: 827A
二进制的“艺”字编码:1000 0010 0111 1010
UTF-8的中文编码规则: 1110xxxx 10xxxxxx 10xxxxxx
UTF-8的“艺”字编码: 1110【1000】 10【0010】【01】 10【11】【1010】
UTF-8的转码过程解析: 8对应的1000被填入第一字节剩余的4位。2对应的0010被填入第2字节剩余的前4位。7对应的0111被拆开,前2位01被填入第2字节的后两位,后2位1被填入第3字节的前2位。A对应的1010被填入第3字节的后4位。
UTF-8的最终编码结果:11101000---对应E8;10001001---对应89;10111010---对应BA。所以最终的UTF-8编码就是%E8%89%BA
    在底层的平台中如JVM,采用的是Unicode字符集,当要把这些字符通过网络传输时,可以选择通过UTF-8或其他(例如GB2312)编码转换方式对要传输的字符编码进行转换。如果目的端也是采用Unicode字符集,那么UTF-8转换后的编码可以被正常识别并解码成最终对应的Unicode字符集编号。如果是非Unicode字符集平台则可能出现乱码(UTF-8中汉字的3个连续字节被解析成GB2312的2个连续字节,出现丢失)。所以推荐在传输的两端采用Unicode字符集编码,在传输方式上采用UTF-8转换方式。

 

中文编码

GB2312中文信息处理的国家标准

 

GB 13000完全等同于ISO 10646-1/Unicode 2.1

 

GBK 对GB2312的扩充, 以容纳GB2312字符集范围以外的Unicode 2.1的统一汉字部分, 并且增加了部分unicode中没有的字符,和GB2312-80兼容

 

GB18030-2000基于GB 13000, 作为Unicode 3.0的GBK扩展版本, 覆盖了所有unicode编码, 地位等同于UTF-8, UTF-16, 是一种unicode编码形式. 变长编码, 用单字节/双字节/4字节对字符编码. GB18030向下兼容GB2312/GBK。

 

GB18030我国的强制标准,所有不支持GB18030标准的软件将不能作为产品出售

 

BIG5  繁体汉字的市场标准

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics