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