JAVA 文件编码学习

ANSI,GBK,UTF-8,UTF-16LE,UTF-16BE

2010-08-23 18:35

ANSI
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS  等各自的编码标准。这些使用  个字节来代表一个字符的各种

汉字延伸编码方式,称为 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 的编码内容完全一致。

 

你可能感兴趣的:(java)