2010-07-02 49 views
1

我對STDIN和STDOUT應用UTF-8編碼。但是,如何確保將UTF-8編碼應用於我傳遞給我的代碼的文件中(<>將從文件中讀取,而不是在STDIN中讀取,如果文本文件在命令行中傳遞)可能。在Perl中的文件句柄上的UTF-8編碼

use open qw(:std :utf8) 

while (<>) { 
    print; 
} 
+1

可能重複[我如何讀取UTF-8與鑽石操作符(<>)?(HTTP:/ /stackoverflow.com/questions/519309/how-do-i-read-utf-8-with-diamond-operator) – Ether 2010-07-03 05:19:01

回答

1

按照open編譯的文件,你已經得到的行爲,你想:

open編譯作爲申報默認的「層」的一個接口(也被稱爲「學科「)爲所有I/O。任何雙參數open,readpipe(又名qx//)以及在該附註的詞彙範圍內發現的類似運算符將使用聲明的默認值。當它們沒有在MODE中指定IO層時,即使是三參數打開也可能受此編譯指示的影響。

perlop文件告訴我們,while (<>) { ... }相當於

unshift(@ARGV, '-') unless @ARGV; 
    while ($ARGV = shift) { 
    open(ARGV, $ARGV); 
    while (<ARGV>) { 
     ... # code for each line 
    } 
    } 
+0

然後,文件句柄被視爲來自STDIN。我正在閱讀perlop文檔,但沒有明確說明,是嗎? – syker 2010-07-02 22:02:23

+0

@syker不,它使用上面引用的'ARGV'文件句柄。引用的'open'編譯指南的文檔指出它適用於* all * I/O。 – 2010-07-12 02:48:15

相關問題