发现wps一个好玩的改变字体导致汉字变化的bug,特意注册发个贴。
我用的是wps 11.8.2.12313版本。不知道最新版wpsAlt+X大法是否支持5位(非BMP平面)16进制Unicode编码和字符的转换,这个版本不行,这一点是不如word的。对不了解的朋友解释一下:比如:选中 4E00 ,用热键Alt+X会变为汉字“一”,选中汉字再Alt+X会变成4E00。这个功能对于输入无法用输入法输入的汉字、特殊符号,或者看到特殊符号想知道具体编码的用户非常有用。但现在汉字数量超过10万,大部分生僻汉字和很多emoji符号的编码都超过U+10000。对于word来说,2003E和"上不下会"这个字可以互相转换,而wps没有这个能力。(这个网站连这个生僻字的复制粘贴也不行,吐槽一下)
上面都是铺垫,下面说这个bug。我在AI命令行输出中复制一段文字,粘贴到wps中,有一个"⚠"符号,编码是U+26A0,在wps中变成了"桷"(U+6877),用Alt+X看编码,竟然变成了"26A/",这完全不是16进制了。我很好奇这个bug怎么产生的。用其他工具分析,这是一个⚠符号和一个看不见的变体选择符U+FE0F组合的,按理说两个字符无法用Alt+X大法,结果wps直接出bug了,"/"编码是0x2F,比“0”编码0x30少1,看来是计算溢出了。
这个字符是黑体风格,但字体显示的是中文宋体,西文Calibri,复杂字体为Times New Roman,后二者都不是汉字字体,不知道实际用的哪个字体。
更好玩的是,我将这个汉字的字体改为宋体,这个字变为"蔎"U+850E,字体改为华文细黑,这个字变为"瘦"U+7626,改为小标宋,这个字变成"氽"u+6C3D,改为国标仿宋又变成了"氼"U+6C3C。实在不明白这里面的逻辑,无法想象程序怎么执行的,特此发帖记录一下。