Perl:从文件导入包含ÅÄÖ的文本

时间:2014-11-24 15:05:28

标签: perl file encoding io

我最终要在这里尝试实现的是将文件中的所有小写字符翻译成大写并将其写入终端。

use utf8;
binmode STDOUT, ":utf8";

$text = "ABCÅÄÖ\n";

$text =~ tr/A-Ö/a-ö/;
print $text;

输出:

abcåäö

正如所料。

但是当我尝试从文件中导入相同的文本时,它会变得疯狂。

use utf8;
binmode STDOUT, ":utf8";

open FILE, $filename or die "An error occurred while reading the file: $!";
$text = join '', <FILE>;
close FILE or die "An error occurred while closing the file: $!";

$text =~ tr/A-Ö/a-ö/;
print $text;

输出

ABCÃÃÃ

我假设导入的文本没有正确编码。任何人都知道在导入文本时如何对文本进行编码?

提前致谢。

杰克

2 个答案:

答案 0 :(得分:3)

您没有告诉Perl对文件进行解码。

use strict;
use warnings;

use utf8;                             # Source code is UTF-8.
use open ':std', ':encoding(UTF-8)';  # Terminal and files are UTF-8.

my $qfn = ...;

open(my $fh, '<', $qfn)
   or die("Can't open file $qfn: $!\n");

my $text = do { local $/; <$fh> };
print(lc($text));

答案 1 :(得分:1)

告诉Perl该文件的编码是什么:

open FILE, '<:utf8', $filename or die $!;

或者,如果要检查编码,请使用

open FILE, '<:encoding(UTF-8)', $filename or die $!;