ANSI,GBK,UTF-8,UTF-16LE,UTF-16BE
2010-08-23 18:35
ANSI
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2
汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下, ANSI 编码代表 GB2312 编码,在日文操作系统下, ANSI 编码代表 JIS
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI
在Ansi 上各国对 ascii 码都进行庞大的互不兼容 的扩充,大陆对 Ansi 的扩充是 ascii->GB2312( 简体中文 )->GBK( 繁体中文 )->GB18030(
数民族语 言) ,台湾对 Ansi 的扩充是 ascii->BIG5 , GB2312 和 BIG5
GBK
GBK编码 (Chinese Internal Code Specification) 是中国大陆制订的、等同于 UCS 的新的中文编码扩展国家标准。 gbk
表示繁体字和简体字,而gb2312 只能表示简体字, gbk 是兼容 gb2312 编码的。 GBK 工作小组于 1995 年 10 月,同年 12 月完成 GBK
兼容GB2312 ,共收录汉字 21003 个、符号 883 个,并提供 1894
iso8859-1
属于单字节编码,最多能表示的字符范围是0-255 ,应用于英文系列。比如,字母 'a' 的编码为 0x61=97
很明显,iso8859-1
多时候,仍旧使用iso8859-1
BIG5编码
是目前台湾、香港地区普遍使用的一种繁体汉字的编码标准,包括440 个符号,一级汉字 5401 个、二级汉字 7652 个,共计 13060
BIG5又称大五码或五大码, 1984 年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer) 、神通 (MiTAC) 、佳佳、零壹 (Zero One)
大众 (FIC) 创立,故称大五码。 Big5
UTF-8
UTF:UCS Transformation Format.考虑到 unicode 编码不兼容 iso8859-1 编码,而且容易占用更多的空间:因为对于英文字母, unicode
需要两个字节来表示。所以unicode 不便于传输和存储。因此而产生了 utf 编码, utf 编码兼容 iso8859-1
的字符,不过,utf 编码是不定长编码,每一个字符的长度从 1-6 个字节不等。另外, utf
用一个字节表示,而汉字使用三个字节。
UTF-16LE UTF-16BE
big endian和 little endian 是 CPU 处理多字节数的不同方式。例如 “ 汉 ” 字的 Unicode 编码是 6C49 。那么写到文件里时,究竟是将 6C
前面,还是将49 写在前面?如果将 6C 写在前面,就是 big endian 。如果将 49 写在前面,就是 little endian
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头 (Big-Endian) 敲开还是从小头 (Little-Endian)
此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian 翻译成 “ 字节序 ” ,将 big endian 和 little endian 称作 “ 大尾 ” 和 “ 小尾 ”
Unicode(UCS)
Unicode编码后的大小是一样的 . 例如一个英文字母 "a" 和 一个汉字 " 好 "
Unicode可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容 iso8859-1
码的,也不兼容任何编码。不过,相对于iso8859-1 编码来说, uniocode 编码只是在前面增加了一个 0 字节,比如字母 'a' 为 "00 61"
需要说明的是,定长编码便于计算机处理(注意GB2312/GBK 不是定长编码),而 unicode
用unicode 编码来处理的,比如 java
在实际应用中UTF-16BE 的编码内容正好和 UNICODE 高低位相反,而 UTF-16LE 与 UNICODE