字符编码

来源:互联网 发布:cad绘图软件下载 编辑:程序博客网 时间:2024/05/22 05:21

字符编码

  • 计算机里面只有数字,计算机软件里的一切都是用数字来表示的,屏幕上显示的一个个字符也不例外。
  • 字符a对应数字97,字符b对应数字98等,这种字符与数字对应的编码规则被称为ASCII(没过标准信息交换码)ASCII的最高bit位都为0,也就是说这些数字都在0127之间。
  • 中国大陆将每一个中文字符都用两个字节的数字来表示,中文字符的每个字节的最高位bit都为1,中国大陆为每个中文字符制定的编码规则称为GB2312(国标码)。
  • GB2312的基础上,对更多的中文字符(包括繁体)进行了编码,新的编码规则称为GBK
  • 在中国大陆使用的计算机系统上,GBKGB2312就被称为该系统的本地字符集。
  • “中国”的“中”字,在中国大陆的编码是十六进制的D6D0,而在中国太歪的编码是十六进制的A4A4,台湾地区对中文字符集得编码规则称为BIG5(大五码)。
  • 在一个国家的本地化系统中出现的一个字符,通过电子邮件传送到另一个国家的本地化系统中,看到的就不是那个原始字符了,而是另外那个国家的一个字符或乱码。

Unicode编码

  • ISO(国际标准化组织)将全球所有的符号进行了东一遍吗,称之为Unicode编码。
  • “中”这个符号,在全世界的任何角落始终对应的都是一个十六进制的4e2d
  • 如果所有的计算机系统都使用Unicode编码,在中国大陆的本地化系统中显示的“中”这个符号,发送到伊拉克的本地化系统中,显示的仍然是“中”这个符号
  •  Unicode编码的字符都占用两个字节的大小,对于ASCII码所表示的字符,只是简单的在ASCII码原来占用的一个字节前面,增加了所有bits0的字节。
  • Unicode只占用两个字节,在全世界范围内所表示的字符个数不会超过216次方(65536),实际上,Unicode编码中还保留了两千多个数值没有用于字符编码。
  •  在相当长的一段时间内,本地化字符编码将于Unicode编码共存。
  •  Java中的字符使用的都是Unicode编码,java在通过Unicode保证跨平台特性的前提下,也支持本地平台字符集。

UTF-8编码

ASCII码字符保持原样,仍然只占用一个字节,对于其他国家的字符,UTF-8使用两个或三个字节来表示,使用UTF-8编码的文件,通常都要用EF BB BF作为文件开头的三个字节数据。

优点:

    • 不出现内容为0x00字节
    • 便于应用程序监测数据在传输过程中是否发生了错误
    • 直接处理使用ASCII码得英文文档

缺点:

  • 某些字符需要使用三个字节

UTF-16编码

  • UTF-16编码只爱Unicode基础上进行了一些细节上的扩充,增加了对Unicode编码没有包括的那些字符的表示方式。
  • UTF-16Unicode的扩种并没有影响Unicode编码所包括的那些字符,只是增加了对Unicode编码没有包括的那些字符的表达方式,一个使用Unicode编码的字符就是UTF-16格式的。
  • Unicode编码将0xD800-0xDFFF区间的数值保留出来,UTF-16扩充的字符,占用是个字节,前面连个字节的数值为0xD800-0xD8FF之间,后面两个字节的数值为0xDC00-0xDFFF之间。
  • 为什么不让前面和后面的两个字节的数值都位于0xD800-0xDFFF之间呢?
  • 在不同的体系结构中,UTF-16编码的Unicode字符在内存中的字节存储循序是 不同的。
  • 对于0x1234这样的一个双字节数据,只用Little-EndianBig-Endian两种方式在内存中存储的格式
  • 如果文件以0xFE 0xFF这两个字节开头,则表明文本的其余部分是Big-EcdianUTF-16编码:如果文件以0xFF 0xFE这两个字节开头,则表明文本的其余部分是Little-EndianUTF-16编码。

字符编码的操作体验:我们可以使用UtriEdit分别查看

  • 查看中文字符的GB2312
  • 查看中文字符的UTF-8
  • 查看中文字符的Unicode
  • Widows记事本程序中用不同编码的编码格式存储文本文件


原创粉丝点击