gpt4 book ai didi

perl - readpipe 以什么编码返回执行命令的结果?

转载 作者:行者123 更新时间:2023-12-04 15:41:52 25 4
gpt4 key购买 nike

这是一个简单的 perl 脚本,用于编写 utf-8 编码文件:

use warnings;
use strict;

open (my $out, '>:encoding(utf-8)', 'tree.out') or die;

print $out readpipe ('tree ~');

close $out;

我希望 readpipe 返回一个 utf-8 编码的字符串,因为 LANG设置为 en_US.UTF-8 .然而,看着 tree.out (同时确保编辑器将其识别为 utf-8 编码)向我显示所有乱码。

如果我更改 >:encoding(utf-8)在对 >:encoding(latin-1) 的公开声明中, 脚本创建一个 utf-8 文件
文本。

这对我来说有点奇怪。这种行为的解释是什么?

最佳答案

readpipe正在向 perl 返回一串未解码的字节。我们知道该字符串是 UTF-8 编码的,但是您没有告诉 Perl。

输出句柄上的 IO 层正在接受该字符串,假设它是 Unicode 代码点并将它们重新编码为 UTF-8 字节。

latin-1 IO 层似乎正常运行的原因是它正在不受干扰地写出每个未解码的字节,因为第 256 个 unicode 代码点与 latin-1 很好地对应。

正确的做法是到 decode readpipe 返回的字节串在将其提供给 IO 层之前,将其转换为代码点字符串。声明use open ':utf8' ,正如 Borodin 所提到的,应该是一个可行的解决方案,如 readpipe open manual page中特别提到.

关于perl - readpipe 以什么编码返回执行命令的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984748/

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