在你的源中使用 Unicode 的 utf8 編譯指示
所述 utf8
編譯指示原始碼將被解釋為 UTF-8。當然,這只有在文字編輯器也將源儲存為 UTF-8 編碼時才有效。
現在,字串文字可以包含任意 Unicode 字元; 識別符號也可以包含 Unicode 但只包含類似字元的字元( 有關更多資訊,請參閱 perldata 和 perlrecharclass ):
use utf8;
my $var1 = '§я§©😄'; # works fine
my $я = 4; # works since я is a word (matches \w) character
my $p§2 = 3; # does not work since § is not a word character.
say "ya" if $var1 =~ /я§/; # works fine (prints "ya")
注意 :將文字列印到終端時,請確保它支援 UTF-8。*
輸出和源編碼之間可能存在複雜且反直覺的關係。在 UTF-8 終端上執行,你可能會發現新增 utf8
pragma 似乎會破壞:
$ perl -e 'print "Møøse\n"'
Møøse
$ perl -Mutf8 -e 'print "Møøse\n"'
M��se
$ perl -Mutf8 -CO -e 'print "Møøse\n"'
Møøse
在第一種情況下,Perl 將字串視為原始位元組並將其列印出來。由於這些位元組碰巧是有效的 UTF-8,它們看起來是正確的,即使 Perl 不知道它們是什麼字元(例如 length("Møøse")
將返回 7,而不是 5)。新增 -Mutf8
後,Perl 會正確地將 UTF-8 源解碼為字元,但預設情況下輸出為 Latin-1 模式,而將 Latin-1 列印到 UTF-8 終端則不起作用。只有當你使用 -CO
將 STDOUT
切換到 UTF-8 時,輸出才會正確。
use utf8
不影響標準 I / O 編碼和檔案控制代碼!