从 perl 中的文件中读取西里尔字符



我在perl中从文件中读取西里尔字符时遇到问题。

文本文件是用记事本编写的,包含"абвгдежзийклмнопрстуфхцчшщъьюя"。这是我的代码:

#!/usr/bin/perl
use warnings;
use strict;
open FILE, "text.txt" or die $!;
while (<FILE>) {
    print $_;   
}

如果我使用 ANSI 编码保存文本文件,我会得到:

рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·№■
如果我使用 UTF-8

编码保存它,并使用包编码中的函数解码('UTF-8', $_),我会得到:

Wide character in print at test.pl line 11, <TEXT> line 1.

还有一堆看不懂的字符。

我在 Windows 7x64 中使用命令提示符

您正在解码输入,但"忘记"对输出进行编码。

您的文件可能是使用 cp1251 编码的。

您的终端需要 cp866。

use open ':std', ':encoding(cp866)';
use open IO => ':encoding(cp1251)';
open(my $FILE, '<', 'text.txt')
   or die $!;

use open ':std', ':encoding(cp866)';
open(my $FILE, '<:encoding(cp1251)', 'text.txt')
   or die $!;

如果您另存为 UTF-8,请使用 :encoding(UTF-8) 而不是 :encoding(cp1251)

相关内容

  • 没有找到相关文章

最新更新