Android toLowerCase() 重音字符问题
Android toLowerCase() issue with accented characters
我的应用程序具有根据某些关键字过滤内容的功能。
这是不区分大小写的,所以为了工作,我首先在源内容上调用 String.toLowerCase()
。
我遇到的问题是源代码为大写并且包含强调字符,例如法语单词:“INVITÉ”
当设置为 lowercase
使用设备默认语言环境 returns“invité”时,这个词
问题是最后一个字符与小写字符“é”不一样
相反,它是 2 个字符的组合:
“电子” 101 &
“ ” 769
因为这个“invité”与“invité”不匹配
我该如何解决这个问题?我不想完全删除重音字符
你应该像这样规范化字符串。
String upper = "INVITÉ";
System.out.println(upper + " length=" + upper.length());
String lower = upper.toLowerCase();
System.out.println(lower + " length=" + lower.length());
String normalized = Normalizer.normalize(lower, Normalizer.Form.NFC);
System.out.println(normalized + " length=" + normalized.length());
输出:
INVITÉ length=7
invité length=7
invité length=6
它也适用于日语。
String japanese = "が";
System.out.println(japanese + " length=" + japanese.length());
String normalized = Normalizer.normalize(japanese, Normalizer.Form.NFC);
System.out.println(normalized + " length=" + normalized.length());
输出:
が length=2
が length=1
我的应用程序具有根据某些关键字过滤内容的功能。
这是不区分大小写的,所以为了工作,我首先在源内容上调用 String.toLowerCase()
。
我遇到的问题是源代码为大写并且包含强调字符,例如法语单词:“INVITÉ”
当设置为 lowercase
使用设备默认语言环境 returns“invité”时,这个词
问题是最后一个字符与小写字符“é”不一样
相反,它是 2 个字符的组合:
“电子” 101 &
“ ” 769
因为这个“invité”与“invité”不匹配
我该如何解决这个问题?我不想完全删除重音字符
你应该像这样规范化字符串。
String upper = "INVITÉ";
System.out.println(upper + " length=" + upper.length());
String lower = upper.toLowerCase();
System.out.println(lower + " length=" + lower.length());
String normalized = Normalizer.normalize(lower, Normalizer.Form.NFC);
System.out.println(normalized + " length=" + normalized.length());
输出:
INVITÉ length=7
invité length=7
invité length=6
它也适用于日语。
String japanese = "が";
System.out.println(japanese + " length=" + japanese.length());
String normalized = Normalizer.normalize(japanese, Normalizer.Form.NFC);
System.out.println(normalized + " length=" + normalized.length());
输出:
が length=2
が length=1