我试图在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方面做错了什么吗?你知道吗
Perl没有做错任何事。Python代码和Perl代码都使用gzip正确压缩数据。只有Perl将输出打印为二进制,而Python代码则打印输出的可读表示形式,例如
b"\x1f\x8b..."
。为了得到与Perl类似的结果,您需要将二进制数据打印到stdout而不是字符串表示,即,代替print(...)
do然后两个程序都将gzip压缩数据写入标准输出。请注意,输出可能仍然不同,因为它们默认情况下对gzip使用不同的选项(压缩比、操作系统类型…),但在这两种情况下,数据都使用gzip进行了正确压缩。你知道吗
相关问题 更多 >
编程相关推荐