【问题标题】:Convert ASCII emoji to hexadecimal将 ASCII 表情符号转换为十六进制
【发布时间】:2020-12-15 22:18:00
【问题描述】:

在大多数情况下,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 转换之间做了一些愚蠢的事情,但由于某种原因我无法弄清楚。任何帮助表示赞赏。

【问题讨论】:

  • “略带微笑的脸”无法用 ASCII 表示。 🙂来自哪里?

标签: java unicode hex emoji utf-16


【解决方案1】:

您期望的字符集是 Windows-1252,而不是 UTF-8。

byte[] bytes = "🙂".getBytes(Charset.forName("windows-1252"));
for (byte b : bytes)
    System.out.printf("%02X", b & 0xff);

输出:

F09F9982

【讨论】:

  • 这就是我发现的。谢谢!
猜你喜欢
  • 2017-03-27
  • 2015-09-27
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2017-06-23
  • 2015-05-22
相关资源
最近更新 更多