文件句柄

使用 open() 设置编码

打开文本文件时,你可以使用三参数 open() 明确指定它的编码。附加到文件句柄的这个/解码器称为“I / O 层”:

my $filename = '/path/to/file';
open my $fh, '<:encoding(utf-8)', $filename or die "Failed to open $filename: $!";

有关 :utf8:encoding(utf-8) 之间差异的讨论,请参阅备注

使用 binmode() 设置编码

或者,你可以使用 binmode() 设置单个文件句柄的编码:

my $filename = '/path/to/file';
open my $fh, '<', $filename or die "Failed to open $filename: $!";
binmode $fh, ':encoding(utf-8)';

打开 pragma

为避免单独为每个文件句柄设置编码,可以使用 open pragma 设置所有后续调用 open() 函数所使用的默认 I / O 层以及此 pragma 的词法范围内的类似运算符:

# Set input streams to ':encoding(utf-8)' and output streams to ':utf8'
use open (IN => ':encoding(utf-8)', OUT => ':utf8');
# Or to set all input and output streams to ':encoding(utf-8)'
use open ':encoding(utf-8)';

使用命令行 -C 标志设置编码

最后,还可以使用 -CD 标志运行 perl 解释器,该标志将 UTF-8 应用为默认 I / O 层。但是,应该避免使用此选项,因为它依赖于无法预测或控制的特定用户行为。