如何在Java中将Unicode字符串转换为ASCII字符串

10

我现在正在尝试在安卓设备上将Unicode字体转换为ASCII。我编写了以下代码来进行转换,但是它失败了,因为转换后的结果无法正确显示。

Unicode字体 = 'ေနေကာင္းပါသလား',需要转换为类似于 '\u100F\u1039\u100D' 的ASCII码。

public static String toJAVA (String zawgyi) {
    String output = "";
    char[] charArray = zawgyi.toCharArray();

    for (int i = 0; i < charArray.length; i++) {
        char a = charArray[i];
        if ((int) a > 255) {
            output += "\\u" + Integer.toHexString((int) a) + "--";
        } else {
            output += a;
        }
    }       
    return output;
}

可能是 https://dev59.com/cEnSa4cB1Zd3GeqPO47I 的重复问题。 - Pragnani
它看起来是重复的,但仍然遇到错误。 - PPShein
1个回答

8

使用java.text.Normalizer类将Unicode转换为ASCII。这是来自回答https://dev59.com/GnI95IYBdhLWcg3w5ic4#2097224的示例代码:

String s = "口水雞 hello Ä";

String s1 = Normalizer.normalize(s, Normalizer.Form.NFKD);
String regex = Pattern.quote("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");

String s2 = new String(s1.replaceAll(regex, "").getBytes("ascii"), "ascii");

System.out.println(s2);
System.out.println(s.length() == s2.length());

抱歉,出现了以下错误。12 15:41:10.909: E/AndroidRuntime(25891): java.util.regex.PatternSyntaxException: U_ILLEGAL_ARGUMENT_ERROR 03-12 15:41:10.909: E/AndroidRuntime(25891): [\p{InCombiningDiacriticalMarks}\p{IsLm}\p{IsSk}]+ - PPShein
现在检查一下,我已经添加了这行代码:String regex = Pattern.quote("[\p{InCombiningDiacriticalMarks}\p{IsLm}\p{IsSk}]+"); ... 我刚刚自己检查过了。 - stinepike
你把上面那行代码添加到哪里了? - PPShein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接