檔案控制代碼

使用 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 層。但是,應該避免使用此選項,因為它依賴於無法預測或控制的特定使用者行為。