编码问题详解

来源:互联网 发布:最近淘宝网怎么了 编辑:程序博客网 时间:2024/05/21 01:54
  • 为什么会有编码

看下图:无论是电脑内存数据,还是本地文件,还是网络传输的数据,数据总是以"二进制"或者称"字节"数组的形式存在的,为了保存字符,就必须完成字符到字节的转换,如何转换的过程叫做编码。为了还原这些字节数组的实际含义,还必须完成字节到字符的映射,如何映射的过程称作译码。

编码过程类似于:

y=f(x) //其中x表示字节,y表示字符,函数f()就表示采用的编码方式。

译码过程:

x=g(y)//其中g是f的反函数。


  • 为什么有很多编码?
首先不同国家使用的字符不同,有汉子,韩文,英文,俄文等,需要的编码函数f当然不一样,所以存在各种f规则,用来映射称01010101;
其次即便是同一种字符,还是有可能采用不同的编码函数f,所以存在各种f,因为有些f可能比另一些f更合适;
最后为了能够囊括所有的字符,国际标准组织采用“大大大F”,把所有的字符都包括住了,这就是国际统一编码UTF,但最终还是没统一起来。。。。。

  • 为什么看起来会乱码?
看上图:本来字符“中文”是按照GBK的函数f1编码成字节的,用f1的反函数再进行译码是正确的。但是有时候阅读器可能错误的采用了译码函数g3来译码。g3又不是f1的反函数,当然和以前的映射过程不一样了,这样当然会乱了。

  • 如何看待编码混乱问题?
1、对于已经存在的字符,它是不知道自己以前是怎么通过译码完成字节到字符的转换的,但是它知道它可以采用任意编码方式进行编码,再变成01010101。
2、对于已经存在的字节数组,你必须清楚的知道,它当初是字符的时候,是采用的哪种编码方式变成01010101。

如果以上两条规则弄明白了,你就应该清楚,根本不存在“GBK字符”或者“UTF8”字符,这一类的说法了,你把“中文”这两个字符使用GBK编码成字节,再译码成字符,这个字符还是以前的字符,和GBK没关系。你采用任何编码方式编码成字节,再译码回去,它还是以前的字符。字符就是字符。~~~~~~


0 0
原创粉丝点击