首页 > 代码库 > 【考据】“烫烫烫”与“锟斤拷”的原理

【考据】“烫烫烫”与“锟斤拷”的原理

在程序猿站点上常常看到一个段子(满满的都是泪啊)

手持两把锟斤拷,口中疾呼烫烫烫。

解释一下为什么会是这两个东西不是别的= =:

棍斤拷乱码:

源于GBK字符集和Unicode字符集之间的转换问题。Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。那么U+FFFD的UTF-8编码出来,恰好是 ‘\xef\xbf\xbd‘。假设这个‘\xef\xbf\xbd‘,反复多次,比如 ‘\xef\xbf\xbd\xef\xbf\xbd‘,然后放到GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,终于的结果就是:锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。

烫烫烫乱码:

在windows平台下,ms的编译器(也就是vc带的那个)在 Debug 模式下,会把未初始化的栈内存所有填成 0xcc,用字符串来看就是"烫烫烫烫烫烫烫",未初始化的堆内存所有填成0xcd,字符串看就是“屯屯屯屯屯屯屯屯”。也就是说出现了烫烫烫,赶紧检查初始化吧。。。