【发布时间】:2021-05-22 12:40:47
【问题描述】:
我有一个文本文件 test.txt,其中包含 UTF8 编码内容 äöü(这些是德语变音符号,只是一个示例,文件大小为 6 字节)。我在 Windows 10 PC 上还有一个具有正确 LANG 设置的 Cygwin 终端:
$ cat test.txt
äöü
我想用 Perl 脚本打印此文件的内容,但无法正常工作。
open my $fh, '<', 'test.txt';
print <$fh>;
close $fh;
结果
$ perl test.pl
├ñ├Â├╝
我尝试了在How can I output UTF-8 from Perl? 找到的所有变体——它们都没有解决我的问题。怎么了?
根据请求进行编辑:
$ file test.txt
test.txt: UTF-8 Unicode text, with no line terminators
$ echo $LANG
我还尝试将 LANG 设置为 de_DE.UTF-8。
编辑缩小问题范围:如果我尝试使用 Cygwin 中包含的 Perl 版本 5.32.1,它会按预期工作。它在Strawberry Perl 5.32.1 版中仍然不起作用。所以这可能不是 Perl 问题,也不是 Windows 问题,也不是语言或编码设置的问题,而是 Strawberry Perl 问题。
【问题讨论】:
-
它对我有用。所以你身边有一个
encoding问题。file test.txt和echo $LANG的输出是什么?如果您确定编码,您可以使用iconv进行转换。 -
感谢您的尝试。我编辑了我的问题并添加了您的命令的结果。
-
以下3个命令给你什么:od -t x1 test.txt;猫测试.txt | od -t x1; perl 测试.pl | od -t x1
-
感谢这个想法。它给出了三倍“0000000 c3 a4 c3 b6 c3 bc”。脚本接缝的输出正常,但
cat test.txt有效,perl test.pl无效。 -
@HåkonHægland:我试过这个,它奏效了。我还尝试了 Cygwin Perl 版本 5.32.1,这也有效。但是对于 Strawberry Perl 5.32.1 版本,它不起作用。所以,这不是 Perl 问题,也不是 Windows 问题——这是 Strawberry 环境的问题。非常感谢!