如何在Perl管道上设置编码?

时间:2010-02-04 13:39:02

标签: perl encoding pipe

在“打开我的$列,'| - :encoding(utf-8)',qw(column);”中是“'| - :encoding(utf-8)'”好?它几乎可以工作。在“Mikołaj”的行中,格式不正确;我该如何解决?

#!/usr/bin/perl
use warnings;
use strict;
use utf8;
binmode STDOUT, ':encoding(utf-8)';
# edit:
binmode DATA, ':encoding(utf-8)';

open my $column, '|-:encoding(utf-8)', qw(column);
print $column "$_\n" for <DATA>;

__DATA__
Julius
Giovanni
George
Alonso
Jerome
Eugène
Reinhold
Gustav
Pavel
Franz
Max
Mikołaj
Maurice
Alec
Émile
Xaver
Henry
Wolfgang
Alexander
Enrico
Bedrich
Joaquín
Bartholomäus
Otto
Carl
Isaak
Anatol
Leos
Herbert
Paul
Benjamin
Matthew
Jean

2 个答案:

答案 0 :(得分:2)

你谈论格式化,显然想要对齐输出。我注意到ł是样本中唯一没有出现在Latin1中的字符。为了排除你只有一个愚蠢的字体的问题,配置你的终端显示一个覆盖范围广的行为良好: DejaVu Sans Mono 很好。

另外,你有没有输出到输出?这就是我得到的:

0000  4d 69 6b 6f c5 82 61 6a  0a                       Miko..aj .

答案 1 :(得分:1)

此示例脚本在BSD / OSX中正常工作。通常在格式化问题时,某处的编码不匹配。确保:

  • 文件以UTF8格式保存(检查您正在使用的任何文本编辑器)
  • 您的终端处理UTF8(查看终端中的文件,应该正确显示)