问题描述
在大多数情况下,ascii转换为十六进制即可。
Hex.encodeHex(ascii.getBytes(StandardCharsets.UTF_8))
但是,这似乎并不完全正确。我试图将“略带笑容的脸” ascii(ð™)转换为十六进制,并不断得到正确但不正确的“ c3b0c5b8e284a2e2809a”。我要查找的值是“ F09F9982”,当将ascii放入文件中时执行“ od -x”时很容易弄清楚。您甚至可以在Notepad ++中做到这一点。
我不知道在尝试编写Java等效代码时我到底在做什么错。我什至尝试将String.getBytes转换为UTF-8,然后将其构建为UTF-16的字符串,但仍然无法获得正确的结果。我的结果一直是“ c3b0c5b8e284a2e2809a”。
有人知道如何生成正确的值吗?
我很确定我在UTF-8和UTF-16转换之间做得有些愚蠢,但由于某种原因我无法弄清楚。任何帮助表示赞赏。
解决方法
您期望的字符集是Windows-1252,而不是UTF-8。
byte[] bytes = "🙂".getBytes(Charset.forName("windows-1252"));
for (byte b : bytes)
System.out.printf("%02x",b & 0xff);
输出:
F09F9982