gpt4 book ai didi

json - 使用 jq 从 JSON 中提取 UTF 未编码的二进制数据

转载 作者:行者123 更新时间:2023-12-02 20:32:32 26 4
gpt4 key购买 nike

假设我有一个 JSON,其中 0xb7 字节编码为 UTF 代码点:

{"key":"_\u00b7_"}

如果我用 jq 提取“key”的值,它会保留该字节的 utf8 编码,即“c2 b7”:

$ echo '{"key":"_\u00b7_"}' | ./jq '.key' -r | xxd
0000000: 5fc2 b75f 0a _.._.

是否有任何 jq 命令可以从此 JSON 中提取解码后的“5f b7 5f”字节序列?

我可以使用 iconv 等额外工具来解决这个问题,但它有点难看:

$ echo '{"key":"_\u00b7_"}' | ./jq '.key' -r \
| iconv -f utf8 -t utf32le \
| xxd -ps | sed -e 's/000000//g' | xxd -ps -r \
| xxd
0000000: 5fb7 5f0a _._.

最佳答案

def hx:
def hex: [if . < 10 then 48 + . else 55 + . end] | implode ;
tonumber | "\(./16 | floor | hex)\(. % 16 | hex)";

{"key":"_\u00b7_"} | .key | explode | map(hx)

产生:

["5F","B7","5F"]

“原始字节”(买者自负)

由于 jq 仅支持 UTF-8 字符串,因此您必须使用一些外部工具来获取“原始字节”。也许这更接近你想要的:

jq -nrj '{"key":"_\u00b7_"} | .key' | iconv -f utf-8 -t ISO8859-1

这会产生三个字节。

这是一个无 iconv 的解决方案:

jq -nrj '{"key":"_\u00b7_"} | .key' | php -r 'print utf8_decode(readline());'

关于json - 使用 jq 从 JSON 中提取 UTF 未编码的二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com