perl 使用Archive::Zip时UTF8导致错误

f4t66c6m  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(206)
#!/usr/bin/env perl
use utf8; #this causes error
use strict;
use warnings;

use Archive::Zip qw( :ERROR_CODES :CONSTANTS );

my $zip = Archive::Zip->new();

my $my_string_with_utf8 = <<'END_UTF8_STRING';
Text with UTF8 open/close 201c/201d “hello”
END_UTF8_STRING

my $zip_pathname = 'myfiles/myfile.txt';
$zip->addString($my_string_with_utf8, $zip_pathname);
unless ( $zip->writeToFileNamed('myZip.zip') == AZ_OK ) {
   die 'write error';
}

错误:Compress::Raw::Zlib::crc 32中的宽字符
为什么utf8会导致这些包出错?perl 5/vendor_perl/Archive/Zip.pm第303行

pu82cl6c

pu82cl6c1#

$my_string_with_utf8并不像名字所暗示的那样使用UTF-8编码。它是一个解码文本字符串,也就是Unicode码点字符串。
文件只能包含字节,因此您需要将这些代码点编码为字节,例如使用UTF-8之类的字符编码。

相关问题