使用java将重音字符转换为英文
Posted
技术标签:
【中文标题】使用java将重音字符转换为英文【英文标题】:Convert accent characters to english using java 【发布时间】:2020-12-04 02:52:39 【问题描述】:我有一个要求,我需要使用来自Iceland
和Japan
的用户使用重音字符进行搜索。我编写的代码适用于一些重音字符,但不是全部。
下面的例子-
À - returns a. Correct.
 - returns a. Correct.
Ð - returns Ð. This is breaking. It should return e.
Õ - returns Õ. This is breaking. It should return o.
下面是我的代码:-
String accentConvertStr = StringUtils.stripAccents(myKey);
也试过这个:-
byte[] b = key.getBytes("Cp1252");
System.out.println("" + new String(b, StandardCharsets.UTF_8));
请指教。
【问题讨论】:
希望对***.com/questions/15190656/…有帮助 这也不适用于 D。 为什么这个问题被否决了。投反对票的评论在哪里???请不要直接否决这个问题。 【参考方案1】:我会说它按预期工作。 StringUtils.stripAccents 的底层代码其实如下。
String[] chars = new String[]"À","Â","Ð","Õ";
for(String c : chars)
String normalized = Normalizer.normalize(c,Normalizer.Form.NFD);
System.out.println(normalized.replaceAll("\\pInCombiningDiacriticalMarks+", ""));
这将输出: 一种 一种 ↓ 哦
如果你阅读https://***.com/a/5697575/9671280的答案,你会发现
Be aware that that will not remove what you might think of as “accent” marks from all characters! There are many it will not do this for. For example, you cannot convert Đ to D or ø to o that way. For that, you need to reduce code points to those that match the same primary collation strength in the Unicode Collation Table.
如果您仍想使用 StringUtil.stripAccents,您可以单独处理。
请尝试https://github.com/xuender/unidecode,它似乎适合您的情况。
String normalized = Unidecode.decode(input);
【讨论】:
如何单独处理? @sTg 我认为github.com/xuender/unidecode 会帮助你,试试看。 这不是免费软件仪式。我们需要购买它的许可证吗 @sTG 是 MIT license 你可以使用它,不需要支付opensource.org/licenses/MIT以上是关于使用java将重音字符转换为英文的主要内容,如果未能解决你的问题,请参考以下文章
使用 .NET 如何将包含 Latin-1 重音字符的 ISO 8859-1 编码文本文件转换为 UTF-8