类编码介绍
常用的编码方式一览:
-
ASCII
用 7 位编码将英文字符和一些常用的符号存诸为从 0 到 127 的数值。
- ISO-8859-1 法语、西 班牙语和德语之类的西欧语言都使用叫做ISO-8859-1 的编码系统(也叫做 “latin-1” )。它使用 7 位 ASCII 字符表示从 0 到 127 的字符, 但接着扩展到了 128-255 的范围来表示如 n 上带有一个波浪线 (241) ,和 u 上带有两个点 (252) 的字符等等。可以说 ASCII 是 ISO- 8859-1 的子集。
- Unicode Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
- UTF-8 UTF-8是一种变长的编码方式,每个 UTF-8 的编码可以是 1 至 6 个字节长。它将 Unicode 编码的字符采用变长的方式进行编码。对 Unicode 中 属于 ISO-8859-1 的编码采用和 ISO-8859-1 相同的单字节编码。其他字符采用两字节以上的编码。实际上对于两个字节的 Unicode 编 码, UTF-8 只要三个字节即可表示。第一个字节由 n 个 1 ( 1< n <= 6 )开始 , n 表示编码的字节数,后面每个字节都以 10 开始,后面 6 位为有效位。将第一位的剩余位和后面的所有字节的后六位连接起来就是对应的 Unicode 编码的数 值。
- GB2312和 GBK 这两种编码都是汉字的编码标准,其中前者是后者的子集。GBK 编码的文本文档中对于 ASCII 中的字符用相同的单字节表示;对于汉字和汉语中的标点符号等 采用双字节编码,其中高字节大于 0x80 ,而 ASCII 的所有字符的编码均小于 0x80, 所以 ASCII 和 GBK 的字符是可以混和起来的。 GBK 的字符集和 Unicode 进行转换是无规则的,需要转换表才能进行转换。
注意 :
Character类,Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。char 数据类型(和 Character 对象封装的值)基于原始的 Unicode 规范 ,将字符定义为固定宽度的 16 位实体。Unicode 标准曾做过修改,以允许那些其表示形式需要超过 16 位的字符,合法代码点 的范围现在是从 U+0000 到 U+10FFFF,即通常所说的 Unicode 标量值 。(也就是上面介绍的unicode,原始unicode将在下面给出定义。)在character的isletter 方法中对于参数 是char 的方法是不支持对扩展字符的判断 而参数是int时 时支持对扩展字符的判断。
基于上面的介绍所以有:char
值表示 Basic Multilingual Plane (BMP) 代码点,其中包括代理项代码点,或 UTF-16
编码的代码单元。int
值表示所有 Unicode 代码点,包括增补代码点。
可以用下面方法检测:
Character.isSupplementaryCodePoint
(int codePoint)
确定指定字符(Unicode 代码点)是否在增补字符范围内。
原始unicode规范: Unicode用一个 2 字节数字表示每个字符,从 0 到 65535 。每个 2 字节数字表示至少在一种世界语言中使用的一个唯一字符。(在多种语言中都使用的字符具有相同的数字码。)这样就确保每个字符一个数字,并且每个数字一个字 符。 Unicode 数据永远不会模棱两可。 Unicode 使用相同的数字表示 ASCII 和 ISO-8859-1 中的字符。只是这两种编码用一个字节表示, 而 Unicode 用两个字节表示。所以 Unicode 表示这两种编码的字符时只要用低字节就可以了,高字节为 0 。
一些疑惑解释:
- UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案,他们之间有什么区别?
解释: 用记事本创建一个文本文件,输入汉字“ 中 ” 分别保存为 Unicode 格式和 UTF-8 格式。 将 UltraEdit 的自动识别 UTF-8 文件格式选项禁止,然后用其打开这两个文件,选用二进制查看方式,可以看到 :
UTF-8格式文件编码为 “EF BB BF E4 B8 AD” 。其中有个三字节的前缀 “EF BB BF” ,这是 UTF-8 格式文本文件的标识。不过这个前缀不要,某些文本查看软件也可以通过编码判断出 UTF-8 格式。 “E4 B8 AD” 就是 “ 中 ” 的 UTF-8 编码。
Unicode格式的文件的完整编码是 “FF FE 2D 4E” 。前面有个双字节前缀 “FF FE” ,这是 Unicode 格式文本文档的编码标识。而我们看到的编码是 “2D 4E” ,而不是如我前面所说的 “4E 2D” ,为什么呢?因为数字是按照低字节在先高字节在后的顺序存储的,所以实际的 Unicode 编码恰恰是 “4E2D”。
具体编码方式,以及各种编码方式之间的细微区别不再介绍,可以参看:http://baike.baidu.com/view/40801.htm?fr=ala0_1
接下来将会介绍中 编码 的处理方式。