gpt4 book ai didi

perl - 从perl的子进程获取UTF字符串

转载 作者:行者123 更新时间:2023-12-02 10:00:22 24 4
gpt4 key购买 nike

我正在编写一个简单的脚本,用于在 Ubuntu Linux(版本 16.04,但这在本例中无关)中获取和设置背景。问题是我的文件夹名称是 UTF-8 编码的(特别是中文)。因此,获取当前壁纸的路径失败,如下所示:

my $user_background=qx/gsettings get org.gnome.desktop.background picture-uri/;

print $user_background的输出:

file:///home/xieerqi/%E4%B8%8B%E8%BD%BD/testimage.jpg

因此,问题是:如何从 perl 中的 shell 命令获取正确编码/解码的字符串

我确实尝试过这个:

my $unicode_String=Encode::decode('utf-8', $user_background );

这不起作用。

添加binmode(STDOUT,":utf8");也没有帮助

添加use utf8;没用

奇怪的是,使用相同的字符串来设置背景确实有效。

最佳答案

听起来您想从 URL 中提取路径。

use open ':std', ':locale';
use feature qw( say );

use Encode qw( decode_utf8 );
use URI qw( );
use URI::Escape qw( uri_unescape );

my $url = URI->new('file:///home/xieerqi/%E4%B8%8B%E8%BD%BD/testimage.jpg');

$url->scheme eq 'file'
or die("Invalid input\n");

my $path = decode_utf8( uri_unescape( $url->path ) );

say $path;

作为一句台词:

perl -CS -MEncode=decode_utf8 -MURI -MURI::Escape=uri_unescape \
-e'CORE::say( decode_utf8( uri_unescape( URI->new($ARGV[0])->path ) ) )' \
file:///home/xieerqi/%E4%B8%8B%E8%BD%BD/testimage.jpg

由于前面的代码片段假设使用 UTF-8 终端,因此我们最好避免立即进行解码和编码:

perl -MURI -MURI::Escape=uri_unescape \
-e'CORE::say( uri_unescape( URI->new($ARGV[0])->path ) )' \
file:///home/xieerqi/%E4%B8%8B%E8%BD%BD/testimage.jpg

关于perl - 从perl的子进程获取UTF字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39072579/

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