我失败的地方?
我有来自服务器的传入字符串,其值为“%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");
图片解释了我的所作所为:
答案 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"));
Йо