使用java将重音字符转换为英文

Posted

技术标签:

【中文标题】使用java将重音字符转换为英文【英文标题】:Convert accent characters to english using java 【发布时间】:2020-12-04 02:52:39 【问题描述】:

我有一个要求,我需要使用来自IcelandJapan 的用户使用重音字符进行搜索。我编写的代码适用于一些重音字符,但不是全部。 下面的例子-

À - 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将重音字符转换为英文的主要内容,如果未能解决你的问题,请参考以下文章

使用Java将String中的大写文本转换为带重音的小写

使用 .NET 如何将包含 Latin-1 重音字符的 ISO 8859-1 编码文本文件转换为 UTF-8

如何在 Erlang 中将重音字符串转换为常规字符串?

所有重音字符都应该使用 html 实体吗?

将非 ASCII 字符(变音符号、重音符号...)转换为最接近的 ASCII 等效字符(创建 slug)

xlsx to plist in Spanish - 重音字符丢失