编码的一些概念

一直对各种编码感到很迷糊,所有趁有时间整理了一下编码的问题,也趁机理清一下其中的概念。字符必须被编码后才能被被计算机处理。早期 的计算机使用7位的ASCII编码。但随着计算机的应用,为了满足处理各国繁多的字符,ASCII编码难以满足需要。于是出现了针对各种不同文字的编码标准。
  • ANSI 不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。不现ANSI编码是互不兼容的,所以无法把不同文字存储在同一ANSI编码文本中。
  • UNICODE,学名"Universal Multiple-Octet Coded Character Set"简称UCS。UCS也可以看作是Unicode Character Set的简称。Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UNICODE编码用两个字节表示,例如如果一个字符的编码为4E59,不同的机器对字节流顺序的理解是不一样的。在Mac上读取时是从低字节开始,那么在Mac OS会认为此4E59编码为594E,找到的字符为“奎”,而在Windows上从高字节开始读取,则编码为U+4E59的字符为“乙”。就是说在Windows下以UTF-16编码保存一个字符“乙”,在Mac OS里打开会显示成“奎”。此类情况说明UTF-16的编码顺序若不加以人为定义就可能发生混淆,于是在UTF-16编码实现方式中使用了大端序(Big-Endian, 简写为UTF-16 BE)、小端序(Little-Endian,简写为UTF-16 LE)的概念。

 

UNICODE编码的实现方式:

  • UTF 是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。使用UNICODE编码比使用ASCII编码多用了一倍的空间,对于英语系的国家来说,ASCII编码对它们来说已经足够了。如果对所有的文字处理都使用UNICODE编码,无疑会造成很大的空间消费。为了节约空间,UTF应运而生。UTF就是对不同范围的字符用不同的长度来编码,既能够编码世界上所有的字符,又能最大情度地节约空间。
  • utf-8 以字节为单位对unicode进行编码。它的特点是对不同范围的字符用不同长度进行编码。

        Unicode编码(16进制)   ║ UTF-8 字节流(二进制) 

   000000 - 00007F      ║ 0xxxxxxx 

   000080 - 0007FF      ║ 110xxxxx 10xxxxxx 

   000800 - 00FFFF       ║ 1110xxxx 10xxxxxx 10xxxxxx 

   010000 - 10FFFF       ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 

从上面的编码可以看出,UFT-8最少用一个字节,最多可以用4个字节对字符进行编码。如果字符范围在000000-00007F的,它的编码跟ASCII完全相同

  • utf-16 16位无符号整数为单位
  • utf-32 以32位无符号整数为单位

 

 

代码页:

你可能感兴趣的:(windows,OS,存储,character,transformation)