22

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

4

3 回答 3

24

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

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

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

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

这将打印

ff = ff
于 2011-08-24T07:31:03.737 回答
5

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

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

于 2011-08-24T07:36:06.980 回答
1

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

于 2011-08-24T07:25:22.893 回答