分离Unicode连字符

在大量的unicode字符中,有一些实际上代表了多个字符,比如两个’f’字符的U + FB00连字字符ff。 有没有什么方法可以轻松将这些字符转换为多个单个字符? 最好是标准Java API中可用的东西,但如果需要,我可以引用外部库。

U + FB00是兼容性字符。 通常,Unicode不支持连字的单独代码点(如果应该使用连字并且不应该影响数据的存储方式,则认为这是布局决策)。 其中一些仍然存在,以允许往返转换与旧编码的兼容性,旧编码确实将连字表示为单独的实体。

幸运的是,连字所代表的字符信息存在于Unicode数据文件中,而且大多数function强大的字符串处理系统都内置了该数据。

在Java中,您需要使用Normalizer类和NFKC表单:

 String ff ="\uFB00"; String normalized = Normalizer.normalize(ff, Form.NFKC); System.out.println(ff + " = " + normalized); 

这将打印出来

  ff = ff 

您正在讨论的过程称为规范化,并在Unicode规范化表单技术说明中指定。

Java SE类库中有一个名为java.text.Normalizer类,它实现了这个过程。 但是,您需要阅读上面链接的Unicode文档,以确定需要使用哪种“规范化表单”来获得所需的结果。 这不是直截了当的……

你可以试试java.text.Normalizer ,但我不确定这是否适用于连字。