- 论坛徽章:
- 0
|
多说几句吧
- use strict;
- use warnings;
- use Encode qw(is_utf8);
- print "utf8 flag is on\n" if is_utf8($ARGV[0]);
- print length($ARGV[0]),"\n";
复制代码kernel@fairland:~/tmp$ ./read.pl 测试
6
我的终端是en_US-UTF-8编码的,如果你认为既然都是UTF-8编码的就可以不用解码就错了
perl并不知道外部输入的内容是什么编码的,所以你需要解码
- use strict;
- use warnings;
- use Encode qw(is_utf8);
- $ARGV[0]=Encode::decode("UTF-8",$ARGV[0]);
- print "utf8 flag is on\n" if is_utf8($ARGV[0]);
- print length($ARGV[0]),"\n";
复制代码kernel@fairland:~/tmp$ ./read.pl 测试
utf8 flag is on
2
同样的,你从文件中读取数据也需要解码,你可以读一行然后使用Encode::decode解码,或者也可以让perl帮你做,方法就是在打开文件的时候就指名文件编码
- open my $file,"<:encoding(UTF-8)",$filename
复制代码 同样的对于STDIN,STDOUT,STDERR也可以类似的设置
- binmode STDIN,":encoding(UTF-8)";
复制代码 最后说一句,从命令行传进来的参数(@ARGV)不属于STDIN |
|