在unl中将unicode字符串写入二进制文件

时间:2012-01-02 16:02:14

标签: perl file unicode binary

我有一个包含不是UTF8的字符串的字符串,例如“עברית” 我想将字符串写入文件而不编码字符串。为此,我打开文件写为二进制文件:

open my $fh, ">>:raw", "/tmp/bla";
print $fh $mystring;
close $fh;

问题是文件已损坏。我在二进制视图中打开它,一些字节已损坏。 难道我做错了什么?是不是可以在没有编码的情况下将字符串写入文件?

2 个答案:

答案 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;