加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – readpipe在什么编码中返回执行命令的结果?

发布时间:2020-12-15 23:36:45 所属栏目:大数据 来源:网络整理
导读:这是一个简单的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设置为toen_US.UTF-8.但是,查
这是一个简单的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设置为toen_US.UTF-8.但是,查看tree.out(同时确保编辑器将其识别为utf-8编码)向我显示所有乱码文本.

如果我将open语句中的>:encoding(utf-8)更改为>:encoding(latin-1),脚本会创建一个带有预期的utf-8文件
文本.

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

解决方法

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

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

latin-1 IO层看起来运行正常的原因是它正在写出每个未解码的字节,因为第一个256个unicode代码点与latin-1很好地对应.

正确的做法是将readpipe返回的字节字符串解码为代码点字符串,然后再将其提供给IO层.正如Borodin所提到的,使用open’:utf8’的语句应该是一个可行的解决方案,因为open manual page中特别提到了readpipe.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读