如何将带有Unicode字符的字符串转换为普通字符串?

时间:2016-03-04 09:58:33

标签: android string unicode

我失败的地方?

我有来自服务器的传入字符串,其值为“%u0419%u043E ”。

我尝试将其转换为普通字符串,但我看到中文字母。这是错误的,因为传入的信件是西里尔文。

代码:

// String test = ""%u0419%u043E"; <--- this is Йо ( cyrillic )
byte[] test = { (byte) 0x25, (byte) 0x75, (byte)0x30, (byte)0x34, (byte)0x31, (byte) 0x39,(byte) 0x25, (byte) 0x75, (byte)0x30, (byte)0x34, (byte)0x33, (byte) 0x45};
String aaa = new String(test, "UTF-16");
aaa = new String(test, "UTF-8");
aaa = new String(test, "ISO-8859-5");

图片解释了我的所作所为:

enter image description here

1 个答案:

答案 0 :(得分:1)

据我所知,这不是标准编码,至少不是UTF- *或ISO - *之一。

您需要自己解码,例如

public static String decode(String encoded) {
    // "%u" followed by 4 hex digits, capture the digits
    Pattern p = Pattern.compile("%u([0-9a-f]{4})", Pattern.CASE_INSENSITIVE);

    Matcher m = p.matcher(encoded);
    StringBuffer decoded = new StringBuffer(encoded.length());

    // replace every occurrences (and copy the parts between)
    while (m.find()) {
        m.appendReplacement(decoded, Character.toString((char)Integer.parseInt(m.group(1), 16)));
    }

    m.appendTail(decoded);
    return decoded.toString();
}

这给出了:

System.out.println(decode("%u0419%u043E"));
Йо