我對STDIN和STDOUT應用UTF-8編碼。但是,如何確保將UTF-8編碼應用於我傳遞給我的代碼的文件中(<>將從文件中讀取,而不是在STDIN中讀取,如果文本文件在命令行中傳遞)可能。在Perl中的文件句柄上的UTF-8編碼
use open qw(:std :utf8)
while (<>) {
print;
}
我對STDIN和STDOUT應用UTF-8編碼。但是,如何確保將UTF-8編碼應用於我傳遞給我的代碼的文件中(<>將從文件中讀取,而不是在STDIN中讀取,如果文本文件在命令行中傳遞)可能。在Perl中的文件句柄上的UTF-8編碼
use open qw(:std :utf8)
while (<>) {
print;
}
按照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 } }
然後,文件句柄被視爲來自STDIN。我正在閱讀perlop文檔,但沒有明確說明,是嗎? – syker 2010-07-02 22:02:23
@syker不,它使用上面引用的'ARGV'文件句柄。引用的'open'編譯指南的文檔指出它適用於* all * I/O。 – 2010-07-12 02:48:15
可能重複[我如何讀取UTF-8與鑽石操作符(<>)?(HTTP:/ /stackoverflow.com/questions/519309/how-do-i-read-utf-8-with-diamond-operator) – Ether 2010-07-03 05:19:01