【发布时间】:2015-12-18 08:10:39
【问题描述】:
我观察到 IPC::Open3 参数作为脚本的一部分出现的奇怪行为。
我给出一个包含 ISO-8859-15 的字符串。就在调用 open3() 之前(字面意思是之前的语句),字符串是正确的(使用 print 和 Data::Dumper 验证)。
然而,一旦子进程启动,参数现在是 UTF-8 编码的。我已经使用所需的可执行文件(freebcp)和包装脚本验证了这一点。我最终编写了一个包装脚本,将所有参数转换回 ISO-8859-15。
是什么导致了这种行为? LANG 设置为 en_AU.ISO-8859-15。它在其他主机上正常工作。我找不到对 binmode() 的任何引用
【问题讨论】:
-
"它可以在其他主机上正常工作。" - 那么也许你也应该向我们描述它工作的主机,以及它不工作的主机。
-
进行转换的是 RHEL 并且使用 perl 5.20.2 的编译版本我的开发环境是使用 stock perl 的 Ubuntu 14.04
-
任何
use open与:encoding或:locale,或-C选项到perl? Perl5 默认不做任何字符集转换——默认一直是哑二进制模式。但在你的情况下,数据似乎不是二进制的。它们是 Perl 中的 Unicode(因此在写出时会进行转换),这意味着您在某处告诉 Perl 从二进制中解码数据。 -
续。如果是这种情况,那么您可能应该明确告诉 Perl 在将数据写入
open3文件句柄时转换它们。 -
我还应该指出,仅使用 open3() 的测试脚本不会进行转换。很奇怪
标签: perl character-encoding ipcopen3