我正在尝试使用"utf8"编译指示编写Perl脚本,并且我得到了意想不到的结果.我正在使用Mac OS X 10.5(Leopard),我正在使用TextMate进行编辑.我的编辑器和操作系统的所有设置都默认为以utf-8格式写入文件.
但是,当我在文本文件中输入以下内容时,将其保存为".pl"并执行它,我得到友好的"带问号的菱形"代替非ASCII字符.
#!/usr/bin/env perl -w use strict; use utf8; my $str = 'Çirçös'; print( "$str\n" );
知道我做错了什么吗?我希望在输出中得到"Çirçös",但我得到' ir s'.
use utf8;
不启用Unicode 输出 - 它允许您在程序中键入Unicode.在print()
声明之前将其添加到程序中:
binmode(STDOUT, ":utf8");
看看是否有帮助.这应该STDOUT
以UTF-8而不是普通的ASCII输出.
您可以使用open pragma.
例如.下面设置STDOUT,STDIN和STDERR使用UTF-8 ....
use open qw/:std :utf8/;
TMTOWTDI选择了最适合您工作方式的方法.我使用环境方法,所以我不必考虑它.
在环境中:
export PERL_UNICODE=SDL
在命令行上:
perl -CSDL -le 'print "\x{1815}"';
或者使用binmode:
binmode(STDOUT, ":utf8"); #treat as if it is UTF-8 binmode(STDIN, ":encoding(utf8)"); #actually check if it is UTF-8
或者使用PerlIO:
open my $fh, ">:utf8", $filename or die "could not open $filename: $!\n"; open my $fh, "<:encoding(utf-8)", $filename or die "could not open $filename: $!\n";
或者用开放的pragma:
use open ":encoding(utf8)"; use open IN => ":encoding(utf8)", OUT => ":utf8";