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