GBK是微软为简体中文而制定的本地编码,在工信部被案。各个国家或地区都会制定并使用各自的本地编码,一些企业也会制定某个国家或地区的本地编码(GBK就是微软制定的简体中文编码)。一份用本地编码编写的文件在不指明所用的本地编码时被打开就可能看到乱码的现象。
为了解决本地编码的乱象,统一编码(UNICODE)和ISO这两个组织都着手制定能容纳各国文字而不冲突的文字编码系统,目前这两个组织相互承认,并且编码兼容。
目前很多计算机系统已使用2字节(16位整数)或4字节(32位整数)的统一编码,统一编码只说明每个字符的编码,但没有说明如何将编码存放入存储介质上。
由于目前计算机系统有高字节在前和低字节在前两种整数存放模式,因此采用高字节在前存放的数据在低字节在前的系统中就会出现异常,反之亦然。同时,我们知道许多编程系统在处理字符串时会将值为0的字节认为是字符串的结束,而无论是高字节在前还是低字节在前的字符串,都会在字符串中出现大量值为0的字节,这时传统的字符串处理函数就无法使用了。
为了解决统一编码如何存放的问题并兼容现有的字符串处理函数,就推出了UTF8编码,这个编码规定了统一编码的存放方式,并且保证依然使用值为0的字节作为字符串的结束符,这样就可以依然使用原有的字符串处理函数而不必新开发一套了。
当然UTF8也存在一个问题,这就是它是变长编码。一个统一编码的字符可能会编码为一个字节、二个字节、三个字节、四个字节(版本1)或六个字节(版本2)。