分离Unicode连字符

时间:2011-08-24 06:36:04

标签: java unicode character ascii ligature

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

3 个答案:

答案 0 :(得分:19)

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

幸运的是,Unicode data file中存在绑定所代表的字符的信息,并且大多数功能强大的字符串处理系统都内置了该数据。

在Java中,您需要使用the Normalizer classNFKC表单:

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

这将打印

ff = ff

答案 1 :(得分:4)

您正在讨论的流程称为规范化,并在Unicode Normalization Forms技术说明中指定。

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

答案 2 :(得分:1)

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