将unicode纯文本转换为常用String

时间:2010-07-27 14:32:23

标签: java unicode

我从外部服务器获得了一个unicode字符串,如下所示:

  

005400610020007400650020007400ED0020007400FA0020003F0020003A0029

我必须使用java解码它。我知道'\ u'前缀会产生魔力(即'\ u0054' - >'T'),但我不知道如何将其转换为常用字符串。

提前致谢。

修改:感谢大家。所有答案都有效,但我只能选择一个:(

再次,谢谢。

3 个答案:

答案 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));
 }