IO 输入与输出(4) -- 字符编码

几乎所有程序都涉及到字符文本的处理,特别是数字通讯和电子商务的迅猛发展,应用程序之间经常交换文本格式的文档,目前存在有多种形式的字符编码。一个应用程序要理解别的程序所产生的文本文档的内容,首先必须了解这个文档所采用的字符编码。

 

大家经常打开一些文本文件会发现看不懂或者是乱码,这就是因为它们采用了特殊的字符编码,下面我们来了解一下什么是字符编码。

 

首先必须理解一个最基本的问题,计算机里只有数字,计算机软件里的一切都是用数字来表示的,即便是屏幕上显示的一个个字符也不例外。

 

ASCII(American Standard Code for Information Interchange美国标准信息交换码)

一个字节所能表示的范围有256个,足以容纳所有的字符。例如字符a对应的数字是97,字符b对应数字是98等,这种字符与数字对应的编码规则被称为ASCII,每个ASCII码与一个8位二进制数对,ASCII码的最高的bit位都是为0,也就是说这些数字都在0127之间。

 

GB2312(信息交换用汉字编码字符集·基本集)

你肯定奇怪,咱们中文呢?ASCII是美国人搞的,但咱们中国将每一个中文字符否用两个字节的数字来表示,也就是通常所说的GB2312。中文字符的每个字节的最高位都是1

 

GBK(汉字内码扩展规范)

GBKGB2312的扩展码,对不常用的汉子和许多符号进行了编码。比如说繁体字。

 

Unicode(统一码、万国码、单一码、标准万国码)

为了解决各个国家和地区使用本地化字符集带来的不利影响,ISO(国际化标准组织)将全世界所有的符号进行了统一编码,称为Unicode码。每个字符都用了2个字节来表示(即能表示65536种字符也是就是216次方),对于英文字符采取前面加0字节的策略,实现了等长兼容。如“a”的ASCII码为0x61Unicode就为0x00 0x61。使用Unicode码不再区分国家和地区。例如“a”不管在世界的哪个国家使用,其使用Unicode编码都是一样的。

 

这里要注意的是Java中的字符使用的都是Unicode编码,Java在通过Unicode保证跨平台的前提下,也支持本地平台的字符集。

 

UTF-8( 8-bit UCS Transformation Format 通用字符集)

是一种针对Unicode的可变长度字符编码(定长码),可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,也就是说ASCII码字符保持原样,仍然只占用一个字节,对于其他国家的字符,UTF-8使用两个或三个字节来表示。使用utf-8编码的文件,通常都要用EF  BB  BF作为文件开头的3个字节。 如果字符是0x0000,或在0x00800x007f之间,对应的UTF码是两个字节,如果字符在0x08000xffff之间,对应的UTF码是三个字节(汉字在UTF-8中是三个字节)

 

UTF-16

utf-8类似,其再Unicode编码的基础上做了细节上的扩充,增加了对Unicode编码没有包括的那些字符的表示是方式。

 

关于这些编码的具体解释和详细信息,大家可以查询:维基百科

 

 版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章