3

我有一个像“\xE2\x80\x93”这样的 UTF-8(字面意思)。

我正在尝试使用 Java 将其转换为 Unicode。

但我无法找到一种方法来转换它。

谁可以帮我这个事?

问候,星期六

4

2 回答 2

2
System.out.println(new String(new byte[] {
    (byte)0xE2, (byte)0x80, (byte)0x93 }, "UTF-8"));

打印一个 em-dash,这就是这三个字节的编码。从您的问题中不清楚您是否有这样的三个字节,或者实际上是您发布的字符串。如果您有字符串,则只需事先将其解析为字节,例如使用以下内容:

final String[] bstrs = "\\xE2\\x80\\x93".split("\\\\x");
final byte[] bytes = new byte[bstrs.length-1];
for (int i = 1; i < bstrs.length; i++)
  bytes[i] = (byte) ((Integer.parseInt(bstrs[i], 16) << 24) >> 24);
System.out.println(new String(bytes, "UTF-8"));
于 2013-06-23T16:18:19.017 回答
2

您可以使用 Apache Commons Lang StringEscapeUtils

或者,如果您确实知道该字符串将始终为 \xHH\xHH 那么您可以:

String hex = input.replace("\x", "");
byte[] bytes = hexStringToByteArray(hex);
String result = new String(bytes, "utf-8");

hexStringToByteArray这里

另请参阅this other SO answer

于 2013-06-23T16:29:00.817 回答