gpt4 book ai didi

来自控制台 (@ARGV)/Windows/的 Perl unicode 支持

转载 作者:行者123 更新时间:2023-12-02 15:16:36 30 4
gpt4 key购买 nike

我正在尝试获取 unicode 字符作为 perl 脚本中的参数:

C:\>perl test.pl ö

#----
# test.pl
#----
#!/usr/bin/perl
use warnings;
use strict;

my ($name, $number) = @ARGV;

if (not defined $name) {
die "Need name\n";
}

if (defined $number) {
print "Save '$name' and '$number'\n";
# save name/number in database
exit;
}

if ($name eq 'ö') {
print "Fetch umlaut 'oe'\n";
} elsif ($name eq 'o') {
print "Fetch simple 'o'\n";
} else {
print "Fetch other '$name'\n";
}

print "ü";

我得到了输出:

Fetch simple 'o'
ü

我已经在 python 3 中测试了代码(算法)并且它有效,所以我得到“ö”。但显然在 perl 中还有一些我必须添加或设置的东西。不管是 Strawberry Perl 还是 ActiveState Perl。我得到了相同的结果。

提前致谢!

最佳答案

#!/usr/bin/perl

use strict;
use warnings;

my $encoding_in;
my $encoding_out;
my $encoding_sys;
BEGIN {
require Win32;

$encoding_in = 'cp' . Win32::GetConsoleCP();
$encoding_out = 'cp' . Win32::GetConsoleOutputCP();
$encoding_sys = 'cp' . Win32::GetACP();

binmode(STDIN, ":encoding($encoding_in)");
binmode(STDOUT, ":encoding($encoding_out)");
binmode(STDERR, ":encoding($encoding_out)");
}

use Encode qw( decode );

{
my ($name, $number) = map { decode($encoding_sys, $_) } @ARGV;

if (not defined $name) {
die "Need name\n";
}

if (defined $number) {
print "Save '$name' and '$number'\n";
# save name/number in database
exit;
}

if ($name eq 'ö') {
print "Fetch umlaut 'oe'\n";
} elsif ($name eq 'o') {
print "Fetch simple 'o'\n";
} else {
print "Fetch other '$name'\n";
}

print "ü";
}

此外,您应该添加 use feature qw( unicode_strings ); 和/或使用 UTF-8 编码您的文件并添加 use utf8;

关于来自控制台 (@ARGV)/Windows/的 Perl unicode 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39902414/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com