http://topic.csdn.net/u/20080331/11/f3b5d6bd-c8c4-4454-93ba-294b03fe70a7.html
UTF-8 以三个字节来表示汉字,GBK 以两个字节来表示汉字。
中华人民共和国的 UTF-8 编码如下:
E4B8AD E58D8E E4BABA E6B091 E585B1 E5928C E59BBD
将这些再组成两个字节的 GBK 编码:
E4B8 ADE5 8D8E E4BA BAE6 B091 E585 B1E5 928C E59B BD
前面10组组成的字为:涓崕浜烘皯鍏卞拰鍥
最后剩下一个:BD,在 GBK 编码中 BD 没有被编码,则以 ?(3F)来代替了,
这时原序列已经被损坏,是没有办法再还原的。
从上面可以看出,奇数个 UTF-8 编码的字符,字节数肯定是个奇数,不能被 GBK 完全编码,最后一个字节被损坏掉了。
而偶数个字符,字节数肯定是个偶数,能被占用两个字节的 GBK 完全编码。
这仅仅是汉字的,如果夹杂着占用两个字节或者一个字节的 UTF-8 字符,情况也是同样的。
所以不能使用 UTF-8 → GBK → UTF-8,这样是行不通的。