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

问题描述

在大多数情况下,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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...