人造“锟斤拷”

程序员的段子 “手持两把锟斤拷,口中疾呼烫烫烫”

“锟斤拷”来源于Unicode字符集和GBK字符集对同一段编码的不同解释。现在的OS和Browser都会判断字符编码,所以锟斤拷已经几乎灭绝了,想看就只能自己造锟斤拷了。

本文用Python简单示范了锟斤拷的制造过程。


Unicode用了一个占位符\uFFFD来表示一些其他语言在Unicode中暂时无法表示的字符。\uFFFD经UTF-8编码后就是\xef\xbf\xbd,占3字节。

当这个’\xef\xbf\xbd’连续出现2次以上的时候,例如\xef\xbf\xbd\xef\xbf\xbd,此时就出现歧义了:

在每字符3字节的UTF-8中,它会以3字节一组的方式正常解码为[FFFD][FFFD][�][�]

在每字符2字节的GBK/GB18030中,它会以2字节一组的方式解码为[EFBF][BDEF][BFBD][锟][斤][拷]


现在的OS和Browser都会判断字符编码,所以锟斤拷已经几乎灭绝了,想看就只能自己造锟斤拷了。

Python为例。

首先把Unicode的占位符重复两遍,然后用UTF-8 encode。

str = (u'\uFFFD'.encode('utf8')*2)

再指定用GBK decode

print(str.decode('gbk'))

这样就能获得一个崭新的锟斤拷了!


那么,其他语言的字符编码也有类似[锟斤拷]的情况,比如台湾Big5的[昍昍昍],日本Shift-JIS的[フフフフフフ]等,也可以用相同的方法人造乱码(๑•̀◡•́๑)。

Leave a Reply

Your email address will not be published. Required fields are marked *