带有补充的Java UTF-8到ASCII转换

boz*_*ozo 10 java character-encoding special-characters

我们在输入上接受UTF-8字符串中的各种国家字符,并且我们需要在输出上将它们转换为ASCII字符串以用于某些遗留用途.(我们不接受中文和日文字符,只接受欧洲语言)

我们有一个小实用程序来摆脱所有的变音符号:

public static final String toBaseCharacters(final String sText) {
    if (sText == null || sText.length() == 0)
        return sText;

    final char[] chars = sText.toCharArray();
    final int iSize = chars.length;
    final StringBuilder sb = new StringBuilder(iSize);

    for (int i = 0; i < iSize; i++) {
        String sLetter = new String(new char[] { chars[i] });
        sLetter = Normalizer.normalize(sLetter, Normalizer.Form.NFC);

        try {
            byte[] bLetter = sLetter.getBytes("UTF-8");
            sb.append((char) bLetter[0]);
        } catch (UnsupportedEncodingException e) {
        }
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

问题是如何更换所有德国尖锐s(ß,Đ,đ)和其他通过上述标准化方法的角色,以及它们的补充(如果是ß,补充可能是"ss",如果是od©补充可以是"D"或"Dj").

有没有一些简单的方法可以做到这一点,没有数百万的.replaceAll()调用?

例如:Đonardan= Djonardan,Blaß= Blass等等.

我们可以用空的空格替换所有"有问题"的字符,但是希望避免这种情况使输出尽可能类似于输入.

谢谢您的回答,

博佐

Hei*_*nzi 0

有没有一些简单的方法可以做到这一点,而无需数百万次 .replaceAll() 调用?

如果你只支持欧洲、拉丁语系的语言,大约 100 种就足够了;这绝对是可行的:获取Latin-1 SuplementLatin Extended-AUnicode 图表并开始聚会。:-)String.replace