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
的编码内容完全一致。