替换字符串中的 Unicode 字符

Replace Unicode Characters in a String

我需要用 'base' 字符替换变音符号(例如 ä、ó 等)。对于大多数字符,此解决方案有效:

StringUtils.stripAccents(tmpStr);

但这漏掉了四个字符:æ、œ、ø 和 ß。

我在这里查看了这个解决方案 Is there a way to get rid of accents and convert a whole string to regular letters?。我认为第一个解决方案会起作用,但它不起作用。

如何将这些字符替换为它们的 'base' 字符(例如,将 æ 替换为 a)。

源代码说(https://commons.apache.org/proper/commons-lang/apidocs/src-html/org/apache/commons/lang3/StringUtils.html),

public static String stripAccents(final String input) {
    if (input == null) {
        return null;
    }        final StringBuilder decomposed = new StringBuilder(Normalizer.normalize(input, Normalizer.Form.NFD));        convertRemainingAccentCharacters(decomposed);        

    // Note that this doesn't correctly remove ligatures...   
 
    return STRIP_ACCENTS_PATTERN.matcher(decomposed).replaceAll(EMPTY);    
}

它有一条评论说, // Note that this doesn't correctly remove ligatures...

因此您可能需要手动替换这些实例。 像,

    String string = Normalizer.normalize("Tĥïŝ ĩš â fůňķŷ ß æ œ ø Šťŕĭńġ", Normalizer.Form.NFKD);
    string = string.replaceAll("\p{M}", "");

    string = string.replace("ß", "s");
    string = string.replace("ø", "o");
    string = string.replace("œ", "o");
    string = string.replace("æ", "a");

变音字符到 ASCII 字符的映射 https://docs.oracle.com/cd/E29584_01/webhelp/mdex_basicDev/src/rbdv_chars_mapping.html