gpt4 book ai didi

perl - "Turn Off"binmode(STDOUT, ":utf8") 本地

转载 作者:行者123 更新时间:2023-12-04 22:45:38 25 4
gpt4 key购买 nike

我的脚本开头有以下块:

#!/usr/bin/perl5 -w
use strict;
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");

在某些子程序中,当有其他编码(来自远处的子程序)时,当接收到西里尔字母或其他字符时,数据将无法正确显示。导致问题的是“binmode”。

我可以在本地“关闭”binmode utf8,仅用于子程序吗?

我无法删除全局 binmode 设置,也无法更改远程编码。

最佳答案

实现此目的的一种方法是“复制”STD句柄,将复制的文件句柄设置为使用 :raw层,并将其分配给 STD 的本地版本处理。例如,下面的代码

binmode(STDOUT, ':utf8');
print(join(', ', PerlIO::get_layers(STDOUT)), "\n");

{
open(my $duped, '>&', STDOUT);
# The ':raw' argument could also be omitted.
binmode($duped, ':raw');
local *STDOUT = $duped;
print(join(', ', PerlIO::get_layers(STDOUT)), "\n");
close($duped);
}

print(join(', ', PerlIO::get_layers(STDOUT)), "\n");

打印
unix, perlio, utf8
unix, perlio
unix, perlio, utf8

在我的系统上。

关于perl - "Turn Off"binmode(STDOUT, ":utf8") 本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801561/

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