在大量的unicode字符中,有一些实际上代表了多个字符,比如两个'f'字符的U + FB00连字字符ff。有没有什么方法可以轻松将这些字符转换为多个单个字符?最好是标准Java API中可用的东西,但如果需要,我可以引用外部库。
答案 0 :(得分:19)
U + FB00是兼容性字符。通常,Unicode不支持连字的单独代码点(如果应该使用连字并且不应该影响数据的存储方式,则认为这是布局决策)。 少数仍然存在,以允许往返转换兼容旧的编码做将连字表示为单独的实体。
幸运的是,Unicode data file中存在绑定所代表的字符的信息,并且大多数功能强大的字符串处理系统都内置了该数据。
在Java中,您需要使用the Normalizer
class和NFKC
表单:
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,但我不确定这是否适用于连字。