可以将utf-8文件编码为白色,如下所示:
open my $fh,">:utf8","/some/path" or die $!;
Run Code Online (Sandbox Code Playgroud)
如何使用IO :: File获得相同的结果,最好在1行中得到?我得到了这个,但是它做得一样吗,是否可以在1行中完成?
my $fh_out = IO::File->new($target_file, 'w');
$fh_out->binmode(':utf8');
Run Code Online (Sandbox Code Playgroud)
作为参考,脚本开始如下:
use 5.020;
use strict;
use warnings;
use utf8;
# code here
Run Code Online (Sandbox Code Playgroud)
我建议尝试Path::Tiny。例如,打开并写出您的文件
use Path::Tiny;
path('/some/path')->spew_utf8(@data);
Run Code Online (Sandbox Code Playgroud)
来自文档,关于spew、spew_raw、spew_utf8
以原子方式将数据写入文件。[ ... ]
spew_raw就像spew使用 binmode of:unix进行快速、无缓冲、原始写入一样。
spew_utf8就像spewabinmodeof:unix:encoding(UTF-8)(或PerlIO::utf8_strict )。如果安装了Unicode::UTF8 0.58+,则将对使用Unicode::UTF8.
该模块集成了许多用于处理文件和目录、路径和内容的工具。它通常是像上面这样的简单调用,但也有方法链、递归目录迭代器、回调钩子等。 贯穿始终的错误处理,一致和周到的处理边缘情况,flock输入/输出句柄,它自己的小而有用的类例外……见文档。
是的,您可以一行完成。
open 接受一个、两个或三个参数。只有一个参数,它只是内置 open 函数的前端。对于两个或三个参数,第一个参数是可能包含空格或其他特殊字符的文件名,第二个参数是打开模式,可选地后跟文件权限值。
[...]
如果 IO::File::open 的模式包含 : 字符,则它将所有三个参数传递给三参数打开运算符。
所以你只需这样做。
my $fh_out = IO::File->new('/some/path', '>:utf8');
Run Code Online (Sandbox Code Playgroud)
它与您的第一行相同,open因为它会被传递。