- 为什么会有编码
看下图:无论是电脑内存数据,还是本地文件,还是网络传输的数据,数据总是以"二进制"或者称"字节"数组的形式存在的,为了保存字符,就必须完成字符到字节的转换,如何转换的过程叫做编码。为了还原这些字节数组的实际含义,还必须完成字节到字符的映射,如何映射的过程称作译码。
编码过程类似于:
y=f(x) //其中x表示字节,y表示字符,函数f()就表示采用的编码方式。
译码过程:
x=g(y)//其中g是f的反函数。
- 为什么有很多编码?
其次即便是同一种字符,还是有可能采用不同的编码函数f,所以存在各种f,因为有些f可能比另一些f更合适;
最后为了能够囊括所有的字符,国际标准组织采用“大大大F”,把所有的字符都包括住了,这就是国际统一编码UTF,但最终还是没统一起来。。。。。
- 为什么看起来会乱码?
看上图:本来字符“中文”是按照GBK的函数f1编码成字节的,用f1的反函数再进行译码是正确的。但是有时候阅读器可能错误的采用了译码函数g3来译码。g3又不是f1的反函数,当然和以前的映射过程不一样了,这样当然会乱了。
- 如何看待编码混乱问题?
2、对于已经存在的字节数组,你必须清楚的知道,它当初是字符的时候,是采用的哪种编码方式变成01010101。
如果以上两条规则弄明白了,你就应该清楚,根本不存在“GBK字符”或者“UTF8”字符,这一类的说法了,你把“中文”这两个字符使用GBK编码成字节,再译码成字符,这个字符还是以前的字符,和GBK没关系。你采用任何编码方式编码成字节,再译码回去,它还是以前的字符。字符就是字符。~~~~~~