如何将U+xxxxx编码指定的表情转换为utf-8?

如何将U+xxxxx编码指定的表情转换为utf-8?

表情符号似乎是使用 U+xxxxx 的格式指定的,
其中每个 x 都是十六进制数字。

例如,U+1F615是个官方 Unicode 联盟代码为了“困惑的脸”

答案1

UTF-8是一个可变长度编码统一码。它被设计为 ASCII 的超集。看维基百科有关编码的详细信息。\x00 \x01 \xF6 \x15将是UCS-4BEUTF-32BE编码。

要从 Unicode 代码点获取 UTF-8 编码,假设语言环境的字符映射是 UTF-8(请参阅 的输出locale charmap),只需:

$ printf '\U1F615\n'

答案2

这是从 UTF-32(大端)转换为 UTF-8 的方法

$ confused=$(echo -ne "\x0\x01\xF6\x15" | iconv -f UTF-32BE -t UTF-8)     
$ echo $confused 

答案3

在头脑中或在纸上完成的好方法:

  1. 计算出它有多少字节:U+0080 下的值是 1 个字节,U+0800 下的值是 2 个字节,U+10000 下的值是 3 个字节,否则是 4 个字节。在你的例子中,4个字节。

  2. 将十六进制转换为八进制:0373025.

  3. 从末尾开始,一次剥离 2 个八进制数字,得到八进制值序列:037 030 025

  4. 如果八进制值少于预期的字节数,请在开头添加额外的 0:000 037 030 025

  5. 对于除第一个之外的所有内容,添加0200以获取:000 0237 0230 0225

  6. 对于第一个,0300如果预期长度是 2,0340如果是 3,或者0360如果是 4,则添加,以获得:360 0237 0230 0225

现在写成八进制转义字符串:\360\237\230\225。如果需要,可以选择转换回十六进制。

相关内容