一.看一段代码
首先敲一段简单的qt代码,将这个cpp文件分别设置为UTF8和GBK格式,看不同运行效果。左边是GBK格式,右边是UTF8格式。左边乱码是因为QT默认是UTF编码格式。
二.查看代码的16进制编码
将以上GBK和UTF8格式的代码,分别用UltraEdit打开,查看16进制编码。可见不同的部分是“我是汉字”,其在GBK和UTF8分别如下表示:
GBK: CCD2 CAC7 BABA D7D6
UTF8: E68891 E698AF EB189 E5AD97
GBK用2字节表示中文,UTF8用3字节表示中文。 所以如果编码为GBK的CCD2 CAC7 BABA D7D6 ,在QT看来就解释不通,于是出现了上图的的乱码。
三.总结
常见的乱码,还有锟斤拷,烫烫烫 ,原理同上。所有的中文乱码都是因为编码和解码不一致导致的。