我有一个包含不是UTF8的字符串的字符串,例如“עברית” 我想将字符串写入文件而不编码字符串。为此,我打开文件写为二进制文件:
open my $fh, ">>:raw", "/tmp/bla";
print $fh $mystring;
close $fh;
问题是文件已损坏。我在二进制视图中打开它,一些字节已损坏。 难道我做错了什么?是不是可以在没有编码的情况下将字符串写入文件?
答案 0 :(得分:1)
您的评估是正确的,这样做是错误的。 You must encode text。 :raw
is for binary data,例如图片。如果您发现UTF-8不合适,也许您正在寻找编码ISO-8859-8或Windows-1255。
阅读http://p3rl.org/UNI以了解Perl中的编码主题。
答案 1 :(得分:0)
编码是使用字节表示文本。例如,
ת === UTF-8 ==========> D7 AA
ת === Windows-1255 ===> FA
ת === iso-8859-8 =====> FA
如果不对文件进行编码,则无法将文本存储在文件中,因为文件只能包含字节。
如果$mystring
已包含字节(编码文本),您的代码有效,但您说您有“Unicode字符串”。
我认为您使用
得出了您的文件已损坏的结论cat file
或类似的。在这种情况下,您希望根据您的语言环境对文件进行编码。
use open ':locale';
open my $fh, ">>", "file" or die $!;
print $fh $mystring;