Perl等价于python编码和gzip

我正在尝试在Perl中生成一个与Python中生成的字符串等效的压缩字符串。

Python(产生正确的输出):

import gzip
test_file = 'example.json'

with open(test_file) as f:
    output_data = gzip.compress(f.read().encode())
    print(output_data)

我在Perl中尝试做的工作或多或少:

use Encode;
use IO::Compress::Gzip qw/gzip/;
use File::Slurp;

my $json = read_file('example.json',{ binmode => ':raw' });
my $utf8_record = encode("utf8",$json);
my $output_data;
gzip \$utf8_record => \$output_data;
print $output_data;

您知道我在Perl方面做错了什么吗?

ujuj010203 回答:Perl等价于python编码和gzip

您对Perl没做错任何事情。您的Python代码和Perl代码都可以使用gzip正确压缩数据。只有Perl将输出打印为二进制,而您的Python代码则打印输出的可读形式,即b"\x1f\x8b..."之类。为了获得与Perl相似的结果,您需要选择将二进制数据而不是字符串表示形式打印到stdout,即代替print(...)

sys.stdout.buffer.write(output_data)

然后,这两个程序都会将gzip压缩数据写入stdout。请注意,由于默认情况下gzip使用不同的选项(压缩率,操作系统类型...),因此输出可能仍会有所不同,但是在两种情况下都使用gzip正确压缩了数据。

本文链接:https://www.f2er.com/3077953.html

大家都在问