less than 1 minute read

近日在处理Windows作为NFS客户端挂载Linux目录时,遇到了乱码问题。原因是Windows中文使用的是GB2312,Linux使用的是UTF-8。借此机会学习一下字符编码。

我们知道计算机是二进制的,用0和1表示不同的数字,那在处理文本的时候,就需要把文本转化成数字。这个转化过程就是编码,最早的编码表是ASCII。ASCII表定义了128个字符,包括了小写字母、大写字母等,如大写字母A的ASCII码是0100 0001。ASCII的局限性在于只定义了128个字符,无法表示其他语言。显然ASCII码只能表示255个字符(1 byte),无法容纳所有其他语言。并且不同国家使用自己的一套编码就会在转码的时候发生问题,因此Unicode诞生了。

通俗来讲,Unicode就是把全世界所有的字符都收纳进去,这样就避免了乱码问题。Unicode一般采用2 byte表示一个字符,对于原有的ASCII,在前面补零,如A的Unicode码是0000 0000 0100 0001,这样就能非常好的兼容ASCII码。但如果只写英文,就会造成传输文本浪费,因此提出了UTF-8,对于英文字母压缩至8位。