perl - 为什么 Perl 的编码层没有任何作用?

标签 perl character-encoding

我需要读取以 iso-8859-1 编码的文件。

出于某种原因,我无法让编码层(如 PerlIO::encoding 中所述)工作。这是我正在做的一个最小的例子。
test.txt包含以 iso-8859-1 编码的单个英镑符号。

% iconv -f iso-8859-1 test.txt
£

% hexdump -C test.txt
00000000  a3 0a                                             |..|
00000002

我的 Perl 脚本:
#!/bin/perl

use warnings;
use strict;

open my $f, "<:encoding(iso-8859-1)", $ARGV[0] or die qq{Could not open $ARGV[0]: $!};

while (<$f>) {
  print;
}

结果:
% ./script.pl test.txt | hexdump -C
00000000  a3 0a                                             |..|
00000002

所以脚本打印它读取的确切字节序列,没有
进行了转换。

最佳答案

我假设未使用特定编码声明的文件句柄默认使用 utf-8 编码,但显然这不是真的。

添加显式

binmode(STDOUT, ":utf8");

解决问题。

关于perl - 为什么 Perl 的编码层没有任何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094348/

相关文章:

PHP strlen 和 mb_strlen 没有按预期工作

java - 用于 html 到 mobi/epub 转换的 API/库

java jar以两种不同的字符编码写入

php - 表已经是 utf8 字符集,仍然在某些字符中出现问号

vim - 通过 ssh 进行编辑时,vim 中的多字节字符显示不稳定

utf-8 - KRL 是否支持 UTF-8?

perl - perl5 库可以在 perl6 中导入吗?

perl 子程序参数列表 - "pass by alias"?

python - 开发合理的 Clearcase 插件以提取某些功能的最佳脚本语言

perl - 使用 perlbrew 是否可以按架构进行多次安装?