特别罕用的字怎么输入? 兼谈Unicode codecharts.pdf文件中有些字符即使复制也得不到正确的内容?
为什么Unicode codechart文件中有些字符即使复制也得不到正确的内容?
Unicode 17.0标准的codechart.pdf文件(下载地址https://www.unicode.org/Public/17.0.0/charts/),收集了标准所覆盖的所有字符。大部分输入法都做不到能够输出这标准中新增的全部字符。如果我想在别的文件中使用某些字符,最简单的办法,我想就是从这个文件中复制出来吧?
然而我意外的发现,这种做法不靠谱,有很多字符不能用这个办法正确复制出来,或者说,虽然PDF文件提供了给你复制的可能,但粘贴到目标程序中,有时你得不到正确的字符。
于是我做一点简单的研究。
先看演示,因为汉字字符在Unicode中数量最多,扩展集也很多。我把字符从PDF文件中复制出来(PDF文件用Foxit PDF Editor打开,操作系统为64位 Windows 11),然后粘贴到Word中,已经设置Word的字体为支持到unicode 17.0的文津宋体。
第1轮,试验基本平面(BMP),复制 CJK统一表意符的首部与尾部,码点为0x4E01的丁,0x9FFF的鿿,都是OK的。
第2轮,试验CJK ExtA, 码点为 0x4300 㐀、 0x4BDF 䶿,也是OK。
第3轮 试验CJK ExtB,码点为0x20000,这里就出问题了,这个码点的字型有3个字符,前两个复制出来的得到的不是汉字,第3个粘贴到Word中得到的却是个昱字。

第4轮,试验CJK ExtC,码点2A700 𪜀 2B73D愸 都是正确的。
第5轮, CJK ExtD,2B740 𫝀 正确,2B81D 又出错了。

简单的测试这些就非常明确的显示了,从CodeCharts.pdf往外复制字符,并不靠谱,有时可以,有时得不到正确的字符。我甚至用十六进制编辑器看了下复制过来的字符,其字符的码点非常随意.比如0x2B820这个字符复制到Hex编辑器中,得到的编码竟然是0x0100,属于Latin字符扩展; 0x2B82A,字形为:⿰以下, 粘贴到了Word中变成了汉字 “偿“。都对不上了。

还有别的问题,比如说一个字符有几种不同的变体字形,按理说 他们复制出来,应该码值是一样的。但实际上往往都是不一样的。这里就不贴证据了。
我推测下,这种现象背后的原因,可能在这个PDF制作时引用的字体,其内部没有规范的给新的字形以正确的unicode编码,而是指定了一个别的编码,比如他们自己使用的顺序号或什么的。生成PDF时,根据这个编码从相应的字体中提取了字形信息放到了PDF中。这样当PDF文件在我们的屏幕上在显示字形时,由于其内部提供了字形信息(也就是所谓的嵌入了字体),它的字形是正确的。但复制到剪贴板上时,PDF编辑器复制的当然不是字形,而是这个字符在嵌入字体中的编码,这个编码与Windows上遵循的Unicode标准的编码不一致,显示就出问题了,表现为复制出来的不是在PDF中看到的那个文件。
这样带来了一个问题,如果我想要在新文件中使用这个字符,那该怎么办?
有几种办法,
最简单的方法,用支持新字符的输入法,比如黄狗五笔Unicode输入法,目前可以打出支持到 unicode 17的汉字。你安装一下即可。
第2种方法,用Word来转换。先查Codechart.pdf 找到这个字的unicode码,这个文件中,汉字除了有Unicode编码,还提供了它的部首与笔画信息,如图示例,这个字的unicode码是十六进制的32501,部首是“厂“, 27.54表示:厂字索引顺序是27,除部首外的笔画是54画。有了这些信息在rsindex.pdf中查字就很快了。

有了这个unicode编码(如32501),然后在Word中输入这个数字,再按Alt+X,就将码点转化为相应的字符了(当然,还要设置合适的字体能够显示它,不然也只看到一个⬜或?。
等效的操作是,可以在Word点工具栏上的按钮,插入--符号--其它符号 打开对话框,选择大字符集的字体,根据它的uniccode码,拉动滚动条或按上下箭头,快速找到的相应的字符再点插入即可。这种办法,只要字体里面有,它就可以显示出来,因此,处理罕用字首先就要准备相应的字体文件。目前可用的有字云字体(Jigmo), 全宋体,文津宋体等。新宋体也有更新的字体文件可以支持到cjk ExtJ.

第3种办法,也很简单,但仅适用于汉字。查unicode 标准的RSindex.pdf; 它像汉字字典一样,可以根据偏旁笔画来找,查找字符之后,从这个文件里复制出来。这个文件做得很规范,我测试了一些字符,连最新的CJK extJ的汉字 也能正确复制出来。
第4种方法,我写了一个小工具,可以根据输入的Unicode码将字符发送到编辑器内(相当于一个Unicode的码点输入法),前提是你拿到了字符的码点。工具见之前的博客《支持最新unicode 17.0标准,可以输入10万汉字的五笔86输》网址。

浙公网安备 33010602011771号