【发布时间】:2021-11-16 00:10:17
【问题描述】:
我是filtering Facebook Messenger JSON dumps 和jq。源 JSON 包含作为 Unicode 序列的表情符号。如何将这些输出为表情符号?
echo '{"content":"\u00f0\u009f\u00a4\u00b7\u00f0\u009f\u008f\u00bf\u00e2\u0080\u008d\u00e2\u0099\u0082\u00ef\u00b8\u008f"}' | jq -c '.'
实际结果:
{"content":"ð¤·ð¿ââï¸"}
想要的结果:
{"content":"????????♂️"}
【问题讨论】:
-
问题在于控制台正在解释那些反斜杠序列。
echo '{... \\u00f0 ...}'更正它...当然实际上您可能不会在控制台中使用复制粘贴的文字,对吧...? -
这不是控制台,而是每个 UTF-8 字节都被编码为单独的 Unicode 代码点这一事实。
content映射到需要显式解码的字符串。 -
这是不正确的 JSON。该规范不允许您以这种方式编码 Unicode;该规范要求带有
\u的代码点使用UTF-16 值,而不是UTF-8 字节序列。可以编写一个解析器,甚至可能部分使用 jq,它将对其进行解码并正确重新编码,但是有没有办法修复发送方以正确编码呢? (有关详细信息,请参阅第 9 节,字符串:ecma-international.org/wp-content/uploads/…) -
我不会说它是不正确的,但它没有那么直接。
-
这真的是你收到的 JSON 吗?还是您从调试器中复制的字节数组?如果是这样,您将在调试器工件上浪费大量时间。