常见的文本代码编码

TXT格式有四种编码

  1. ANSI
  2. Unicode
  3. Unicode big endian
  4. UTF-8

举一个实例:
打开”记事本”程序Notepad.exe,新建一个文本文件,内容就是一个”严”字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。
然后,用文本编辑软件UltraEdit中的”十六进制功能”,观察该文件的内部编码方式。
1)ANSI:文件的编码就是两个字节”D1 CF”,这正是”严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节”FF FE 25 4E”,其中”FF FE”表明是小头方式存储,真正的编码是4E25
3)Unicode big endian:编码是四个字节”FE FF 4E 25”,其中”FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节”EF BB BF E4 B8 A5”,前三个字节”EF BB BF”表示这是UTF-8编码,后三个”E4B8A5”就是”严”的具体编码,它的存储顺序与编码顺序是一致的。

常见的编码格式

ASCII编码

是出现最早的编码格式。属于单字节编码。ASCII码使用7bit表示一个字符,共128个字符。是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。

ANSI编码

是在ASCII编码的基础上拓展的一中编码。将ASCII编码补全到8bit。用8bit表示1个字符,共256个字符。所谓ANSI编码,就是一种未经国际标准化(也没办法标准化,因为扩展部分的内码存在交集)的兼容ASCII编码的,非Unicode字符集编码。Win98 之前的系统都是采用这种编码格式。其中最常见的就是ISO8859-1编码。

Unicode编码

ANSI编码编码出现后,各国在ANSI编码基础上,拓展出了各国的编码集,但由于ANSI字符集在不同语言环境下的不统一,导致字符集太多,国际交流中也需要进行字符集转换,带来很大不便。于是出现了Unicode字符集。Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容ISO8859-1字符集的,也不兼容任何编码。该字符集使用16bit代表一个字符,可表示65536个字符。为了在网络上传输unicode字符,Unicode可以有多种编码方式,如UTF-16, UTF-8, UTF-32等。

UTF-8编码

UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。这里的关系是,UTF-8是Unicode的实现方式之一。
考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。UTF-8编码的重要特性就是兼容iso8859-1编码。所以,java可以通过iso8859-1解码一些ANSI编码的中文文件,然后再以UTF-8编码格式编码,就可以解决java中的中文乱码问题。

GBK/GB2312编码

ANSI编码出现后,各国在ANSI编码基础上,拓展出了各国的编码集。中国也拓展出了中文编码。GBK/GB2312是汉字的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。 也就是说GBK/GB2312编码是中国拓展的能够解析中文的ANSI编码。同样,因为GBK/GB2312兼容iso8859-1编码,java可以通过iso8859-1解码一些ANSI编码的中文文件,然后再以UTF-8编码格式编码,就可以解决java中的中文乱码问题。因为GBK/GB2312是在ANSI编码基础上拓展的,所以也可以用GBK/GB2312来解码ANSI编码的txt文件。
注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。

有关汉字字符标准的说明

GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字。当然还有其他的字符。包括控制键和其他字符大约7573个字符编码
gbk编码是对gb2312编码的扩充,容纳的汉字更多,但仅仅是扩充,没有质的变化。保留了所有gb2312编码,在此基础上进行编码范围的扩充.容纳(包含特殊字符)共22014个字符编码.
gb18030编码是在gbk编码基础上的扩充,因为汉字更多,仅仅使用两位编码已经不能
容纳要求的汉字,所以采用了24位混和的办法,可以支持更多的汉字编码。并且保留了原有的gbk 2字节编码兼容gb2312和gbk编码的文件。大概容纳55657个编码(包含特殊字符)
unicode编码(也就是UTF编码):俗称万国码,致力于使用统一的编码准则表达各国的文字。
为表达更多的文字,utf-8采用2/3混编的方式。目前容纳的汉字范围小于gbk编码。并且以
3字节的方式处理中文,带来了兼容性的问题,原有的gbk,gb2312,gb18030编码文件都不能正常的处理,还有很长的路要走。

ISO8859标准

ISO8859 不是一个标准,而是一系列的标准,这套字符集与编码系统的共同特色是,以同样的码位对应不同字符集。

ISO8859-1 字符集,也就是 Latin-1,是西欧常用字符,包括德法两国的字母。
ISO8859-2 字符集,也称为 Latin-2,收集了东欧字符。
ISO8859-3 字符集,也称为 Latin-3,收集了南欧字符。
ISO8859-4 字符集,也称为 Latin-4,收集了北欧字符。
ISO8859-5 字符集,也称为 Cyrillic,收集了斯拉夫语系字符。
ISO8859-6 字符集,也称为 Arabic,收集了阿拉伯语系字符。
ISO8859-7 字符集,也称为 Greek,收集了希腊字符。
ISO8859-8 字符集,也称为 Hebrew,收集了西伯莱 (犹太人) 字符。
ISO8859-9 字符集,也称为 Latin-5 或 Turkish,收集了土耳其字符。
ISO8859-10 字符集,也称为 Latin-6 或 Nordic,收集了北欧 (主要指斯堪地那维亚半岛) 的字符。
ISO8859-11 字符集,也称为 Thai,它是从泰国的 TIS620 标准字符集演化而来。
ISO8859-12 字符集,目前尚未定义。
ISO8859-13 字符集,也称为 Latin-7,主要函盖波罗的海(Baltic) 诸国的文字符号,也补充一些在 Latin-6 中遗漏的拉脱维亚 (Latvian) 字符。
ISO8859-14 字符集,也称为 Latin-8,它将 Latin-1 中的某些符号换成塞尔特语 (Celtic) 的字符。塞尔特族是指英伦外围的威尔斯人 (Welsh) 和盖尔人 (Gaelic)。
ISO8859-15 字符集,也称为 Latin-9,或者被匿称为 Latin-0,它将 Latin-1 中较少用到的符号删除,换成当初遗漏的法文和芬兰字母;还有,把英镑和日元之间的金钱符号,换成了欧盟货币符号。
ISO 8859-16,正式编号为ISO/IEC 8859-16:2001,又称Latin-10,这个字符集设计来涵盖阿尔巴尼亚语、克罗地亚语、匈牙利语、意大利语、波兰语、罗马尼亚语及斯洛文尼亚语等东南欧国家语言。 `

你可能感兴趣的:(编辑器)