我从外部服务器获得了一个unicode字符串,如下所示:
005400610020007400650020007400ED0020007400FA0020003F0020003A0029
我必须使用java解码它。我知道'\ u'前缀会产生魔力(即'\ u0054' - >'T'),但我不知道如何将其转换为常用字符串。
提前致谢。
修改:感谢大家。所有答案都有效,但我只能选择一个:(
再次,谢谢。
答案 0 :(得分:4)
它看起来像UTF-16编码。这是一种转换它的方法:
public static String decode(String hexCodes, String encoding) throws UnsupportedEncodingException {
if (hexCodes.length() % 2 != 0)
throw new IllegalArgumentException("Illegal input length");
byte[] bytes = new byte[hexCodes.length() / 2];
for (int i = 0; i < bytes.length; i++)
bytes[i] = (byte) Integer.parseInt(hexCodes.substring(2 * i, 2 * i + 2), 16);
return new String(bytes, encoding);
}
public static void main(String[] args) throws UnsupportedEncodingException {
String hexCodes = "005400610020007400650020007400ED0020007400FA0020003F0020003A0029";
System.out.println(decode(hexCodes, "UTF-16"));
}
}
你的例子返回“Tatetítú?:)”
答案 1 :(得分:2)
您可以简单地将长度为4的字符串中的字符串拆分,然后使用Integer.parseInt(s, 16)
来获取数值。将其转换为char
并从中构建一个String。对于上面的例子,你将获得:
Tatetítú? :)
答案 2 :(得分:1)
它可以被解释为UTF-16或UCS2(以2字节编码的代码点序列,十六进制表示),只要我们不属于BMP,它就是等价的。 另一种解析方法:
public static String mydecode(String hexCode) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<hexCode.length();i+=4)
sb.append((char)Integer.parseInt(hexCode.substring(i,i+4),16));
return sb.toString();
}
public static void main(String[] args) {
String hexCodes = "005400610020007400650020007400ED0020007400FA0020003F0020003A0029";
System.out.println(mydecode(hexCodes));
}