how can I convert unicode string to ASCII in java

20,052

use java.text.Normalizer class to convert from unicode to ascii. here is a sample code from the answer 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());
Share:
20,052
PPShein
Author by

PPShein

Updated on July 28, 2022

Comments

  • PPShein
    PPShein almost 2 years

    I'm now trying to convert unicode font to ascii in android. I wrote following coding to convert unicode font to ascii but it's failed. Because result cannot display properly after being converted.

    unicode font = 'ေနေကာင္းပါသလား' to something like '\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;
    }
    
  • PPShein
    PPShein about 11 years
    Sorry, got following error.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}]+
  • stinepike
    stinepike about 11 years
    now check i have added the line String regex = Pattern.quote("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p‌​{IsSk}]+"); ... I just checked by myself
  • PPShein
    PPShein about 11 years
    where did you add above line to?