我正在尝试运行一个使用波斯语/阿拉伯语字符的简单perl代码:
#!/usr/bin/perl
use strict;
use warnings;
print "سلام";
我在Windows 7上使用草莓perl。当我启动命令行并执行程序时,显示的消息是乱码。编码应为utf-8以正确呈现消息。
所以我想如果我使用chcp 65001
命令,问题就会得到解决。不幸的是,这没有帮助,我仍然有同样的问题。
我尝试重写起始行以获得正确的编码:
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use warnings qw(FATAL utf8);
binmode STDOUT, ':encoding(UTF-8)';
print "سلام";
然后我在命令行上运行perl并首先执行了行chcp 65001
然后运行程序。这就是我得到的:
答案 0 :(得分:2)
这似乎与我的recent question和blog posts最终与Why is PERLIO_F_CRLF set on the bottom-most 'unix' layer on Windows?有关。
解决方法似乎是使用binmode(STDOUT, ":unix:encoding(utf8):crlf");
来撤消输出到cmd.exe
窗口(仅在这种情况下)最底层' unix&#的事实39; layer设置了CRLF标志(与perliol直接矛盾)。
您可以使用具有许多不错功能的ConEmu代替cmd.exe
,并且可以轻松设置自定义字体(除了具有私人设置的各个标签等)。< / p>
不要让cmd.exe
中发生的事情发生任何事情。