【发布时间】:2015-08-23 20:13:26
【问题描述】:
我想将英语 (i) 的小写“I”与土耳其语 (i) 的小写“İ”匹配。它们是相同的字形,但它们不匹配。当我做System.out.println("İ".toLowerCase()); 时,字符 i 和一个点被打印出来(这个网站不能正确显示)
有没有办法匹配这些?(最好不用硬编码)我想让程序匹配与语言和 utf 代码无关的相同字形。这可能吗?
我已经测试了标准化,但没有成功。
public static void main(String... a) {
String iTurkish = "\u0130";//"İ";
String iEnglish = "I";
prin(iTurkish);
prin(iEnglish);
}
private static void prin(String s) {
System.out.print(s);
System.out.print(" - Normalized : " + Normalizer.normalize(s, Normalizer.Form.NFD));
System.out.print(" - lower case: " + s.toLowerCase());
System.out.print(" - Lower case Normalized : " + Normalizer.normalize(s.toLowerCase(), Normalizer.Form.NFD));
System.out.println();
}
结果未正确显示在站点中,但第一行(iTurkish)在小写 i 附近仍然有 ̇。
目的和问题
这将是一本多语种词典。我希望程序能够识别“İFEL”以“if”开头。为了确保它们不区分大小写,我首先将两个文本都转换为小写。 İFEL 变成 i(dot)fel 并且“if”不被识别为它的一部分
【问题讨论】:
-
这两个字母不是同一个 uni 码,所以它们不匹配。
-
你可以用commons-lang从字符串中去掉变音符号:org.apache.commons.lang3.StringUtils.stripAccents(String)
-
@agad 不会阻止区分 i 和 ı 吗?如果没有办法,我会考虑。
-
@Zelldon true 但它们是相同的字形。归一化的点不匹配它们吗?
标签: java unicode normalization unicode-normalization