2013-03-12 210 views
10

我现在正在尝试将unicode字体转换为android中的ascii。我写了下面的代码将unicode字体转换为ascii,但它失败了。因为转换后结果无法正确显示。如何将Unicode字符串转换为java中的ASCII码

Unicode字体= 'ေနေကာင္းပါသလား' 的东西像 '\ u100F \ u1039 \ u100D'

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; 
} 
+0

http://stackoverflow.com/questions/1490218/utf-16-to-ascii-conversion-in-java – Pragnani 2013-03-12 08:49:46

+0

的可能重复这似乎重复,但还是会遇到错误。 – ppshein 2013-03-12 09:30:05

回答

6

使用java.text.Normalizer类从Unicode转换为ASCII。这里是答案示例代码https://stackoverflow.com/a/2097224/931982

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()); 
+0

对不起,得到以下错误。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 2013-03-12 09:13:18

+0

现在检查我已经添加了行String regex = Pattern.quote(“[\\ p {InCombiningDiacriticalMarks} \\ p {IsLm} \\ p {IsSk} ] +“); ...我只是自己检查了 – stinepike 2013-03-12 09:31:12

+0

你在哪里添加了上面的内容? – ppshein 2013-03-12 09:33:59

相关问题