英文:
Convert ASCII emoji to hexadecimal
问题
关于大部分情况下,将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转换之间做了一些愚蠢的事情,但由于某种原因我无法弄清楚。任何帮助将不胜感激。
英文:
For the most part, conversion of ascii to hex works with this.
Hex.encodeHex(ascii.getBytes(StandardCharsets.UTF_8))
However, this doesn't appear to be exactly correct. I was trying to convert "slightly smiling face" ascii (🙂) into hex and keep getting "c3b0c5b8e284a2e2809a" which is correct but not correct. The value I'm looking for is "F09F9982" which is easily figured out when doing an "od -x" when the ascii is put in a file. You can even do it in Notepad++.
What I can't figure out is what the heck I'm doing wrong when trying to code a Java equivalent. I even tried String.getBytes to UTF-8 and then take that to build a string to UTF-16 and still couldn't get the right results. I keep getting "c3b0c5b8e284a2e2809a" for my result.
Anybody know how to generate the correct value?
I'm pretty sure I'm doing something dumb between UTF-8 and UTF-16 conversion but I can't figure it out for some reason. Any help is appreciated.
答案1
得分: 1
好的,以下是您要翻译的内容:
The character set you are expecting is Windows-1252, not UTF-8.
byte[] bytes = "🙂".getBytes(Charset.forName("windows-1252"));
for (byte b : bytes)
System.out.printf("%02X", b & 0xff);
output:
F09F9982
英文:
The character set you are expecting is Windows-1252, not UTF-8.
byte[] bytes = "🙂".getBytes(Charset.forName("windows-1252"));
for (byte b : bytes)
System.out.printf("%02X", b & 0xff);
output:
F09F9982
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论