“烫屯锟斤拷”,程序员应该知道的原理

“手持两把锟斤拷,口中疾呼烫烫烫”,对程序员来讲既是冷笑话,也是编程中经常遇到的问题。它的原理是什么呢?小编给你分析一下。

“烫屯锟斤拷”,程序员应该知道的原理

常见乱码

在Visual Studio中的Debug模式下,如果声明一个变量,但是没有初始化,微软会给未初始化的内存复制为0xCC。给为初始化的内存赋0xCC是有原因的,0xCC其实是INT3中断指令,所以如果在Debug模式下试图去执行这块未初始化的内存的话就会中断程序。但VS中调试器默认的字符集是MBCS,而在MBCS中0xCCCC正好就是中文中的“”,所以显示出来就都是烫。如果没有初始化的变量是用分配堆的内存(例如:c++ new出来的内存),则VS默认初始化成0xCD,0xCDCD在MBCS字符集中就是

Unicode和老编码体系的转化过程中,有一些字用Unicode是没法表示的,Unicode官方用了一个占位符(U+FFFD)来表示这些文字。U+FFFD的UTF-8编码是0xEFBFBD,如果重复多次形成:EFBFBDEFBFBDEFBFBD。 这样在GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,最终的结果就是:锟斤拷——(0xEFBF),(0xBDEF),(0xBFBD)。


分享到:


相關文章: