韦德体育官网

锟斤拷

乱码字符
订阅
订阅
0有用+1
0
锟斤拷,是一串经常在搜索引擎页面和其他网站上看到的乱码字符组合,乱码源于字符编码转换问题。当Unicode字符无法正确表示时,会使用替换字符U+FFFD(�)来代替 [1] [4] [7-9]。该字符的UTF-8编码为0xEFBFBD [4] [6] [9]。当该字节序列被错误地按照GBK编码解读时,GBK编码系统会将这些字节两两组合,分别对应"锟"、"斤"、"拷"三个汉字,从而显示出"锟斤拷" [4-6] [9-10] [13]。相关的乱码变体还包括"烫烫烫"、"屯屯屯"。"烫烫烫"产生自Visual C++的Debug模式,未初始化的栈内存被填充为0xCC,在GBK编码中对应汉字"烫" [1] [5]。"锟斤拷"最初在程序员间流传,通过技术论坛、博客传播,成为中文互联网的特色文化现象 [5]
中文名
锟斤拷
所属学科
计算机
属 性
乱码字符
原 因
字符集之间的转换错误
出现领域
互联网

基本含义

播报
编辑
锟斤拷,是一串经常在搜索引擎页面和其他网站上看到的乱码字符。乱码源于GBK字符集和Unicode字符集之间的转换问题 [7-8]。当Unicode字符集中某些字符无法被正确表示时,会使用一个特殊的占位符字符U+FFFD(REPLACEMENT CHARACTER)来代替。这个占位符在UTF-8编码中对应的字节是0xEFBFBD。当这个字节序列重复出现并被错误地按照GBK编码解读时,就会显示出"锟斤拷"这样的乱码 [4]

原因

播报
编辑
Unicode是一直在更新的,在这个过程中,肯定有一些比较新的字符他是无法表示的。或者即使Unicode发布了新版纳入了某个文字,但是很多软件系统并未升级也会有这样的问题。
就像生活中一些手机厂商新出的那些emoji表情,在自己的手机上可以正常显示,发到其他品牌的手机上可能就无法显示。这其实也是字符集不支持导致的。
发生以上情况时,无法显示的时候也需要有一个字符来表示的,在Unicode中,这个字符就是 ,他也是Unicode中定义的一个特殊字符。也就是"0xFFFD REPLACEMENT CHARACTER",所有无法表示的字符都会通过这个字符来表示。 [1]
我们上网的时候不用去关心网站采用了什么编码格式,但是页面中不时出现的乱码还是会让我们头疼。在这点上,Firefox的用户更是深有体会,用Firefox浏览网页看到乱码的机会要比Internet Explorer多得多。 乱码主要与字符编码系统有关。例如一个网页中常出现的乱码"锟斤拷",它就是新老编码系统转换中出现的。
锟斤拷
锟斤拷锟斤拷
Visual Studio中的Debug模式下,如果声明一个变量,但是没有初始化,微软会给未初始化的内存赋值为0xCC。给未初始化的内存赋0xCC是有原因的,0xCC其实是INT3中断指令,所以如果在Debug模式下试图去执行这块未初始化的内存的话就会中断程序。
但VS中调试器默认的字符集是MBCS,而在MBCS中0xCCCC正好就是中文中的"烫",所以显示出来就都是烫。
如果是用分配堆的内存,会初始化成0xCD,0xCDCD在MBCS字符集中就是屯。
锟斤拷则涉及unicode的字符集转换问题,Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。U+FFFD的UTF-8编码是0xEFBFBD,如果重复多次形成:EFBFBDEFBFBDEFBFBD 。
锟斤拷
GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,最终的结果就是:锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。 [3]
Python3代码:
print((u'\uFFFD'.encode('utf-8')*2).decode('gbk'))
输出结果:"锟斤拷"。

产生机制

播报
编辑
"锟斤拷"乱码的产生源于特定的编码转换过程,当文本从UTF-8编码转换为GBK编码时,如果遇到无法在GBK中表示的字符,系统会使用Unicode中的替换字符U+FFFD(�)来代替。这个替换字符在UTF-8编码下对应的字节序列为0xEF 0xBF 0xBD [4] [6]。当GBK编码系统读取这个UTF-8编码的字节序列时,由于GBK使用两个字节表示一个汉字,它会将连续的三个字节0xEF、0xBF、0xBD两两组合进行解读。这三个字节两两组合后,恰好分别对应GBK字符集中的三个汉字:"锟"(0xEFBF)、"斤"(0xBDEF)和"拷"(0xBFBD) [3-4] [9]。要产生完整的"锟斤拷"字符串,至少需要两个连续的替换字符�,其UTF-8编码为0xEFBFBDEFBFBD,这样在GBK解码时才能形成完整的三个汉字组合 [6] [10]。通过代码可以直观展示这一过程,例如在Java中将包含两个�字符的字符串从UTF-8编码转换为GBK编码,输出结果即为"锟斤拷" [6] [13]

示例

播报
编辑
"锟届瀿锟斤拷雮傡锟斤拷直锟斤拷锟"、"锟斤拷锟斤拷之锟斤拷锟窖э拷锟 "……
上面这些字句是毫无实际意义的,但它们却形象地表达出了一些莫名其妙的问题。这是一个很经典的乱码,最容易出现的地方就是搜索引擎。
例如这个招聘就非常经典:
所属行业:线缆
单位规模:100-499人
注册资金:1299万
联系人:锟斤拷锟斤拷
联系人职位:锟斤拷锟斤拷
传真:xxx-xxxxxxxx
电子信箱:xxxx_xxx@xxxxxx.xxx
通信地址:
邮编:
单位网址:
单位介绍:台锟斤拷锟斤拷业锟斤拷台锟斤拷锟斤拷锟侥碉拷f锟斤拷锟斤拷锟斤拷锟?锟斤拷锟斤拷/锟斤拷锟斤拷
招聘职位:锟斤拷锟斤拷
人数:20人
发布日期:2007-07-17
联系人:锟斤拷锟斤拷

历史背景与文化现象

播报
编辑
在1990年代到2000年代初,中文互联网正处于编码标准的"战国时代",如GB2312、GBK、BIG5、UTF-8并存,开发者面临着巨大的兼容性挑战 [5]
"锟斤拷"的走红轨迹最初只在程序员间流传,通过技术论坛、博客传播,成为中文互联网的特色文化现象,甚至有商家将其注册为商标 [5]
现实案例分析显示,某电商网站在促销期间部分商品价格显示为"锟斤拷",导致用户无法正常下单;某政府部门的官方网站政策文件打开后出现大量"锟斤拷",引发公众质疑 [5]
"锟斤拷"现象是技术发展的见证者,也是程序员的共同记忆 [5]

相关乱码

播报
编辑
除了锟斤拷以外,还有两组比较经典的乱码,分别是"烫烫烫"和"屯屯屯",这两个乱码产生自VC,这是debug模式下VC对内存的初始化操作。VC会把栈中新分配的内存初始化为0xcc,而把堆中新分配的内存初始化为0xcd。把0xcc和0xcd按照字符打印出来,就是烫和屯了。 [1]此外,还有'锘锘锘'等乱码变体,其产生原理也类似。这些乱码现象虽然表现形式不同,但根源都指向同一个问题——字符编码处理不当。 [5]

预防与解决

播报
编辑
对于开发者,统一使用UTF-8编码并明确声明,在必须进行编码转换时确保准确性 [4-5]。出现'锟斤拷'时,说明在字节和字符的转换过程中使用了不同的编码,应修改成使用同一种编码方式 [12]。预防口诀为"源码、库、表、连接、终端,一律UTF-8不迷路" [4]
对于普通用户,使用现代浏览器并在出现乱码时尝试切换编码 [5]
亚洲博彩平台排名