将 ASCII 表情符号转换为十六进制

Convert ASCII emoji to hexadecimal

在大多数情况下,ascii 到 hex 的转换适用于此。

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