带有重音字符的 Android toLowerCase() 问题

问题描述

我的应用有一项功能可以根据某些关键字过滤内容。 这是不区分大小写的,所以为了工作,我首先在源内容调用 String.toLowerCase()

我遇到的问题是当源是大写并且包含重音字符时,例如法语单词:“INVITÉ”

这个词在使用设备认语言环境设置为 lowercase 时返回“invité” 问题是最后一个字符和小写字符“é”不一样 相反,它是 2 个字符的组合: "e" 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