白二娃
有这样一条短视频引起了我的兴趣,呼市119 路公交车显示出“顺蛋踩■□行荒?呐浜稀?”的乱码。作为程序员,你能破译出这条乱码的原文吗?
产生这种乱码的原因是因为中文字符以4位16 进制编码形式存储,在存入液晶屏的过程中遗失了部分字符,通常是缺少前2 位编码,而剩下的字符仍然按4 位一组显示,这就导致所显示出的字符出现乱码。我们通过文字编码的知识其实是可以还原出原文的。
首先搜索“汉字字符集编码查询”(https://www.qqxiuzi.cn/bianma/zifuji.php),在这里可以查询汉字的编码,也可以通过编码查询汉字。输入能够识别的“顺蛋踩”,获得3 个字的GB2312 字符“CBB3”“B5B0”“B2C8”(如图1)。
那么原来正确的字符编码应该是“B3B5”“B0B2”。将“B3B5 B0B2”输入查询,按GB2312 编码反查,获得“车安”这两个字。
将已知条件全部填入表格,获得确定的字符“车安谢配合”,图2 中黑色编码为确定,绿色为推测。
猜测“安”后面的词组是“安全”,查询“全”的编码是“C8AB”,与“踩”编码中的C8 刚好一致。谢的词组有谢谢和感谢,已知谢字编码D0BB,看它旁边的编码不会是重复的谢字,所以应该是感谢。查询感的编码为“B8D0”,与行字的D0 刚好吻合,所以是“感谢XX 配合”。根据语义猜测“感谢您的配合”查询后填入表格,刚好合适。
现在我们来寻找缺少的前2 位,XXCB是一个可以和车组成词组的字。在“GB2312汉字编码字符集对照表”中搜索各个XXC0与+B 的交叉点,最后在19 区找到“B3CB”乘字,比较符合题意。
这时我们就差不多完成了破译工作,中间断句用的逗号,句子结尾试一下是惊叹号还是句号,最终获得了“乘车安全,感谢您的配合”。
总之,Bug 产生的原因就是编码存储过程中遗失了开头的B3,导致指针位置有了一个字节的偏差。
……
关注读览天下微信,
100万篇深度好文,
等你来看……