将符号、重音字母转换为英文字母

问题是,如您所知,Unicode图表中有数千个字符,我想将所有相似的字符转换为英语字母表中的字母。

例如,以下是一些转换:

ҥ->H
Ѷ->V
Ȳ->Y
Ǭ->O
Ƈ->C
tђє Ŧค๓เℓy --> the Family
...

我看到字母A / a有20多个版本,我不知道如何对它们进行分类。它们看起来像大海捞针。

unicode 字符的完整列表位于 http://www.ssec.wisc.edu/~tomw/java/unicode.htmlhttp://unicode.org/charts/charindex.html 。只需尝试向下滚动,即可查看字母的变化。

我如何使用Java转换所有这些?请帮帮我:(


答案 1

从 如何从 .NET 中的字符串中删除音调符号(重音符号)中重新发布我的帖子?

此方法在java中工作正常(纯粹是为了删除变音符号(即重音符号))。

它基本上将所有重音字符转换为其去重音对应字符,然后是其组合变音符号。现在,您可以使用正则表达式来去除音调符号。

import java.text.Normalizer;
import java.util.regex.Pattern;

public String deAccent(String str) {
    String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD); 
    Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
    return pattern.matcher(nfdNormalizedString).replaceAll("");
}

答案 2

它是Apache Commons Lang的一部分,截至3.0版。

org.apache.commons.lang3.StringUtils.stripAccents("Añ");

返回An

另请参见 http://www.drillio.com/en/software-development/java/removing-accents-diacritics-in-any-language/