gpt4 book ai didi

perl - 如何在 Perl 中将命令行参数视为 UTF-8?

转载 作者:行者123 更新时间:2023-12-03 17:51:39 25 4
gpt4 key购买 nike

@ARGV的元素如何处理作为 Perl 中的 UTF-8?

目前我正在使用以下解决方法..

use Encode qw(decode encode);

my $foo = $ARGV[0];
$foo = decode("utf-8", $foo);

..这有效但不是很优雅。

我正在使用从 bash v3.2.25 调用的 Perl v5.8.8,LANG 设置为 en_US.UTF-8。

最佳答案

外部数据源在 Perl 中很棘手。对于命令行参数,您可能会将它们作为您的语言环境中指定的编码。不要依赖您的语言环境与可能运行您的程序的其他人相同。
您必须找出然后转换为 Perl 的内部格式的内容。幸运的是,这并不难。
I18N::Langinfo模块具有获取编码所需的东西:

    use I18N::Langinfo qw(langinfo CODESET);
my $codeset = langinfo(CODESET);
一旦知道编码,就可以将它们解码为 Perl 字符串:
    use Encode qw(decode);
@ARGV = map { decode $codeset, $_ } @ARGV;
尽管 Perl 将内部字符串编码为 UTF-8,但您永远不应该考虑或知道这一点。你只需解码你得到的任何东西,这会将它变成 Perl 的内部表示。相信 Perl 会处理所有其他事情。当您需要存储数据时,请确保使用您喜欢的编码。
如果你知道你的设置是 UTF-8 并且终端会给你作为 UTF-8 的命令行参数,你可以使用 A Perl 的 -C 选项转变。这告诉您的程序假设参数被编码为 UTF-8:
% perl -CA program

关于perl - 如何在 Perl 中将命令行参数视为 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19893711/

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