最近我在处理从 pdf 转换到 docx 的时候,总会出现丢字问题,让我一度以为是字体的原因,结果方正、思源、文泉驿换了个遍也没搞定,最终发现是一个 unicode 问题。
我用 javascript 构造了一个测试用例,你可以在 chrome 控制台里运行它:
console.log("网飞" == "⽹⻜") // false
明明两个字符串都是「网飞」,但是却不一样!通常此类问题多半是内容中混入了某些不可见字符导致的问题,不过本例却是个例外。如果你把上面代码复制到一个 Word 文档里,那么会发现后面的内容不见了,也就是丢字了!问题分析到这里,我心想该不会同一个汉字有不同的 unicode 编码吧,于是我在 charbase 里检索了一下:
下面是正常的网字,其在 unicode 中属于 CJK Unified Ideographs 部分:
正常的网字
下面是异常的网字,其在 unicode 中属于 Kangxi Radicals 部分:
异常的网字
下面是正常的飞字,其在 unicode 中属于 CJK Unified Ideographs 部分:
正常的飞字
下面是异常的飞字,其在 unicode 中属于 CJK Radicals Supplement 部分:
异常的飞字
综上所述,我们平常使用的「正常」的汉字属于「CJK Unified Ideographs」,而那些「异常」的汉字属于「Kangxi Radicals」和「CJK Radicals Supplement」,实际上它们是汉字中的「部首」,通常它们不会出现在内容中才对,可是为什么在我的 pdf 文档里会频繁出现呢?因为我的 pdf 文档都是通过 typora 生成的,所以我猜测可能是 typora 出于某种目的有意为之,当然也可能是我以小人之心度君子之腹了。
最后讲一个笑话吧:话说有一个人,他为了玩游戏需要注册一个账号,本来他想叫「雪山飞狐」,但是被人用了,叫「雪山飞狼」也重复,结果他不停的改啊改,最后不得已叫了「雪山飞猪」。如果他看过本文的话, 那么他应该有办法注册自己心仪的账号了。