有没有办法在@ARGV中解码UTF-8字符?

时间:2016-06-24 22:03:56

标签: perl utf-8 character-encoding

据我所知,perl解释器不会自动解码终端的命令行参数。这意味着,如果它们包含宽字符,那么应该像这样处理它们:

#!/usr/bin/env perl

use I18N::Langinfo qw(langinfo CODESET);
use Encode qw(decode);
use Data::Dumper;

binmode STDOUT, ':utf8';

my $codeset = langinfo(CODESET); # returns 'UTF-8'

print Dumper \@ARGV;

foreach my $arg (@ARGV) {
    push @new_ARGV, decode $codeset, $arg;
}

# Now, the strings inside @new_ARGV are in valid internal format
print Dumper \@new_ARGV;

上面的脚本给出了如下结果(终端和语言环境设置为UTF-8):

$ perl AC_351.pl śóą
$VAR1 = [
          'ÅóÄ'
        ];
$VAR1 = [
          "\x{15b}\x{f3}\x{105}"
        ];

我是否应该总是解码这样的命令行参数,或者是否有一些设置或开关告诉Perl自己处理这个?

0 个答案:

没有答案