【问题标题】:UTF-8 encoding on filehandle in PerlPerl 中文件句柄的 UTF-8 编码
【发布时间】:2011-03-11 07:08:27
【问题描述】:

我正在对 STDIN 和 STDOUT 应用 UTF-8 编码。但是,我如何确保将 UTF-8 编码应用于传递给下面代码的文件(如果在命令行上传递文本文件, 将从文件而不是 STDIN 读取),只需几行可能。

use open qw(:std :utf8)

while (<>) {
    print;
}

【问题讨论】:

标签: perl utf-8 filehandle


【解决方案1】:

根据open pragma 的文档,你已经得到了你想要的行为:

open pragma 用作为所有 I/O 声明默认“层”(也称为“学科”)的接口之一。在此 pragma 的词法范围内找到的任何两个参数 openreadpipe(又名 qx//)和类似运算符都将使用声明的默认值。如果在 MODE 中未指定 IO 层,即使是三参数打开也可能会受到此 pragma 的影响。

perlop 文档告诉我们while (&lt;&gt;) { ... } 相当于

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

【讨论】:

  • 因此文件句柄被视为来自 STDIN。我正在阅读 perlop 文档,但它没有明确说明,是吗?
  • @syker 不,它使用上面引用的ARGV 文件句柄。 open pragma 的文档中引用的摘录指定它适用于 all I/O。
猜你喜欢
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2018-01-16
  • 2015-04-13
相关资源
最近更新 更多