#!/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行
1条答案
按热度按时间pu82cl6c1#
$my_string_with_utf8
并不像名字所暗示的那样使用UTF-8编码。它是一个解码文本字符串,也就是Unicode码点字符串。文件只能包含字节,因此您需要将这些代码点编码为字节,例如使用UTF-8之类的字符编码。