gpt4 book ai didi

json - 使用 Centos 在 perl 中将二进制数据嵌入 JSON

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:39 24 4
gpt4 key购买 nike

我有一种情况,我需要将原始电子邮件文件转换为 json,并使用 HTTP POST 将其传输到远程服务器,使用 perl 和 Cent OS 6.5

我已经从 CentOS 软件库本身而不是 CPAN 安装了 perl-JSON。我提到的原始电子邮件文件可能包含国际字符。它的大小通常为几百 KB。

由于 JSON 默认不支持二进制数据,我应该如何将原始电子邮件文件嵌入到 JSON 结构中并执行 HTTP POST?

perl-JSON 使用 perl-JSON-PP 并且它有方法 encode_json()、decode_json() 并且它期望是 UTF-8 格式。

在我的情况下使用它安全吗,还是我必须将 base64 编码的字符串添加到 json 中?

最佳答案

我不会太担心 JSON 消息本身可能是也可能不是 UTF8 编码的事实。消息的编码不会影响内容的编码。

假设我们要传输一个包含每个字节一次的 256 字节字符串:

my $string = join '', map chr, 0x00 .. 0xFF;

当我们对消息进行编码和解码时,我们再次得到一个等价的字符串:

my $message = encode_json { str => $string };
my $new_string = (decode_json $message)->{str};

$new_string eq $string or die "The strings aren't equal";

虽然字符串相等,但它们的内容不同。我们可以通过“降级”新字符串来实现:

use utf8;
# this may die if the $new_string contains characters outside of
# the native encoding
utf8::downgrade($new_string);

这是如何工作的以及为什么工作是完全明确定义的,但公认更可取的是使用仅 ASCII 编码来保护消息:

use MIME::Base64;
use JSON;

my $string = join '', map chr, 0x00 .. 0xFF;

my $message = encode_json { str => encode_base64 $string };
my $new_string = decode_base64 decode_json($message)->{str};

$string eq $new_string or die;

关于json - 使用 Centos 在 perl 中将二进制数据嵌入 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23421684/

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