再次学习编码

Ascii

  • Ascii编码表共128个字符
  • 前32个被称为不可见字符
  • 后96个被称为可见字符

相对可见

  • 不可见字符中
    回车,换行,制表位三个字符经常出现在文本文件中,我称之为相对可见:
    CR(0x0D),LF(0x0A),TAB(0x09)

相对不可见

  • 可见字符中
    空格,SPACE(0x20)性质与TAB差不多,可以在文本文件中显示为空白,本身属于可见字符,因为显示为空白,所以也可以说它相对不可见
    Rubout(0x7F)是真的不可见,文本文件中很少出现
    这两个字符我称之为相对不可见字符

文本文件中常见的Ascii字符

  • 96个可见字符去掉Rubout
  • 3个不可见字符CR,LF,TAB
    这98个字符经常出现在Ascii文本文件中

GB2312

保持了对Ascii的兼容,因为高位置1,所以可以直接与Ascii区分

  • 首字节在A1-F7之间
  • 尾字节在A0-FE之间,不使用FF

使用较小的扩展表范围,能够很容易与Ascii区分。
由此可见,扩展Ascii表是所有乱码的最终根源。

Ascii扩展字符

Ascii扩展字符,也使用了8bit中的高位1,所以,这是最初所有乱码的根源。当汉字不慎被识别为Ascii扩展表中的字符时,乱码就产生了。

GBK

依然是良好的设计,保持着克制,继续兼容GB2312和Ascii表。

  • 首字节在81-FE之间,完全处于扩展表中,不在Ascii表中
  • 尾字节在40-FE之间,拆开来看,基本都是可见的Ascii字符
  • 尾字节依然不使用FF
  • 且不使用7F

GB18030

有很多号称实现了GB18030的系统和软件,但我从没有见过其中的少数民族字符。既没有输入过,也没有见过。只见过少数藏文字符,但是文件编码是Unicode格式,也许字库是GBK顺序索引的。我怀疑,暂时还没有系统实现GB18030的所有四字节部分。

GB18030只是继续兼容GBK的口头标准,非事实标准。

UTF-8

真是一个良好的设计,对Ascii保持兼容。且内容含蓄、克制。很容易识别其中的各种字符。

  • 单字节的都是Ascii码,小于128
  • 多字节的,最高字节开头有几个连续的1,就表示一共有几个字节
  • 多字节的,从高向低,每个字节中,第一个0以后的,就是有效的数据位

唯一的缺点是汉字编码有点长,需要三个字节。

UTF-16

糟糕的设计。简单的存储码位。无论什么内容都可以出现在文本文件中。真担心它的四字节部分如何实现。
把文本文件搞的跟二进制文件没有界限。

总结

UTF-8似乎已经成为事实上的编码标准。

假如当初直接把GBK码表简单映射到Unicode中该是一件多么美妙的事。那么现在GBK和Unicode之间就不需要查表转换了。

你可能感兴趣的:(再次学习编码)