在众多的unicode字符中,有些字符实际上代表着不止一个字符,例如将两个'f'字符合成为U+FB00连字体ff。有没有一种简单的方法可以将这样的字符转换为多个单个字符?最好是Java标准API中可用的,但如果需要,我可以参考外部库。
U+FB00 是一个兼容性字符。一般来说,Unicode 不支持单独的连字码位(认为是否应该使用连字是布局决策,不应影响数据存储)。少数这样的字符仍然存在,以便与旧的编码进行往返转换兼容,这些旧编码将连字表示为单独的实体。
幸运的是,连字所代表的字符信息已经存在于Unicode 数据文件中,并且大多数功能强大的字符串处理系统都内置了这些数据。
在 Java 中,您需要使用Normalizer
类和NFKC
格式:
String ff ="\uFB00";
String normalized = Normalizer.normalize(ff, Form.NFKC);
System.out.println(ff + " = " + normalized);
这将会打印:
ff = ff
java.text.Normalizer
的类实现了此过程。但是,您需要阅读上面链接的Unicode文件才能确定您需要使用哪种“归一化形式”以获得所需结果。这并不直观....