将日文字符转换为十六进制不起作用

时间:2016-07-28 11:15:55

标签: java encoding character-encoding apache-commons

我的代码非常简单(使用commons-codec-1.10.jar)

System.out.println(Hex.encodeHex("三菱グループ".getBytes(StandardCharsets.UTF_8), true));

它在我的电脑中产生e4b889e88fb1e382b0e383abe383bce38397,但是根据http://codebeautify.org/string-hex-converter,它应该是4e0983f130b030eb30fc30d7。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

Hex.encodeHex工作正常,但结果是UTF-8编码,而codebeautify.org似乎使用的是UTF-16。

让我们从三开始。这是U + 4E09。在UTF-16中编码为4E 09,它匹配codebeautify输出的开头。在UTF-8中,它编码为E4 B8 89,与您的Java输出相匹配。

如果您想要UTF-16,只需使用StandardCharsets.UTF_16BE代替StandardCharsets.UTF_8。 (但只有在真的想要UTF-16时才这样做。在大多数情况下,UTF-8是一种更好的编码,IMO。)