【问题标题】:How to convert this hex string to unicode in java?如何在java中将此十六进制字符串转换为unicode?
【发布时间】:2018-10-05 10:58:59
【问题描述】:

我从网络服务中得到以下结果:

 "\\x52\\x50\\x1F\\x1F\\x44\\x46\\x57\\x47"

我需要获取 unicode 字符的字符串,我认为应该是:

"\u0052\u0050\u001F\u001F\u0044\u0046\u0057\u0047"

即"RPDFWG"

我不能使用replace("\\x", "\u00");,因为它说“\u00”不是有效的unicode

【问题讨论】:

  • replace("\\x", "\\u00")
  • Web 服务的结果是否坚持 ASCII 范围内的字符?或者可以有 \x80 和更大的值,在这种情况下字符编码会很重要?
  • 您是否真的从 Web 服务中获得了 \\x,或者这正是您表示它的方式?
  • @guleryuz No. \u 仅适用于编译器。

标签: java string unicode hex


【解决方案1】:

此代码适用于我:

try {
  String orig = "\\x52\\x50\\x1F\\x1F\\x44\\x46\\x57\\x47";
  byte[] bytes = new byte[orig.length() / 4];

  for (int i = 0; i < orig.length(); i += 4) {
    bytes[i / 4] = (byte) Integer.parseInt(orig.substring(i + 2, i + 4), 16);
  }

  System.out.println(new String(bytes, "UTF-8"));
}
catch (Exception e) {
  e.printStackTrace();
}

您可能想将编码更改为ISO-8859-1,或者只是简单的ASCII——我无法从您的示例中看出这里的编码是什么。

【讨论】:

  • 他将\\x 放在引号中。我不能确定原始海报是否正确地表示了这一点,但如果你把它放在引号中,\\x 应该表示一个实际的斜线字符后跟字母“x”。我认为在原始发帖人另有说明之前,我以这种方式解释这种情况是合理的——而且这种合理的假设当然不值得投反对票。
  • @VicJordan:我的上述评论并非针对您,而是对已删除评论的回应。
猜你喜欢
  • 1970-01-01
  • 2014-12-22
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2013-05-10
  • 2015-04-30
相关资源
最近更新 更多