Perl Unicode 烹饪手册:指定文件的编码

℞ 19:以特定编码打开文件

虽然将默认的 Unicode 编码设置为 IO 是合理的,但有时默认编码并不正确。在这种情况下,可以在 open 函数的模式选项中手动指定文件句柄的编码,或者使用 binmode 操作符。Perl 的 IO 层将为您处理编码和解码。这是处理编码文本的正常方式,而不是通过调用低级函数。

指定用于输入的文件句柄的编码

    open(my $in_file, "< :encoding(UTF-16)", "wintext");
     # OR
     open(my $in_file, "<", "wintext");
     binmode($in_file, ":encoding(UTF-16)");

     # ...
     my $line = <$in_file>;

指定用于输出的文件句柄的编码

     open($out_file, "> :encoding(cp1252)", "wintext");
     # OR
     open(my $out_file, ">", "wintext");
     binmode($out_file, ":encoding(cp1252)");

     # ...
     print $out_file "some text\n";

这里可以指定的不仅仅是编码。例如,":raw :encoding(UTF-16LE) :crlf" 这一咒语包括隐式的 CRLF 处理。更多详情请参阅 PerlIO

上一篇文章:℞ 18:使所有 I/O 默认为 UTF-8

系列索引:标准序言

下一篇文章:℞ 20:Unicode 大小写

标签

反馈

这篇文章有什么问题吗?请通过在 GitHub 上打开问题或拉取请求来帮助我们。