我的代码非常简单(使用commons-codec-1.10.jar)
System.out.println(Hex.encodeHex("三菱グループ".getBytes(StandardCharsets.UTF_8), true));
它在我的电脑中产生e4b889e88fb1e382b0e383abe383bce38397,但是根据http://codebeautify.org/string-hex-converter,它应该是4e0983f130b030eb30fc30d7。我错过了什么吗?
答案 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。)