我有一个perl脚本来启动默认程序的脚本文件。
system("Start C:\\Temp\\test.jsx");
它使用英文用户名工作文件但是当我将用户名更改为aiЦ中时它不起作用。
也没有出现错误消息,我无法调试。
答案 0 :(得分:0)
perl
使用所谓的ANSI函数与外界进行交互。这意味着,如果您使用有趣的字符(例如,美国英语Windows安装上的某些土耳其语字母),perl
将无法看到它们。正如I wrote on my blog:
您无法在命令行上将Windows代码页之外的字符传递给
perl
。您是否已将代码页设置为65001并使用-CA
命令行参数perl
并不重要:因为perl
使用main
而不是{{} 1}}作为入口点,它永远不会在ANSI代码页中看到除字符之外的任何内容。例如:
wmain
这是因为
$ chcp 65001 $ perl -CAS -E "say for @ARGV" şey sey
没有出现在我的笔记本电脑正在使用的ş
中。当它到达CP 437
的内部时,它已经变为perl
。
因此,对于股票s
,您无能为力。我正在研究一组补丁,但事情干预了。今年夏天我仍然可以解决它。
现在,在你的情况下,你正在传递"有趣的角色"通过perl
到外部程序。同样的问题也适用。因为system
正在使用用于生成进程等的ANSI函数版本,所以生成的程序将看不到Unicode环境。因此,如果您尝试将韩语或日语程序与不包含它们的系统代码页一起使用,我不确定会发生什么。
perl
运行后,您无能为力。从那时起,环境,命令行参数,一切都存在于ANSI世界中。可能会有一些时髦的解决方法,但为此,我们需要确切知道perl
程序从'aiЦ中'
程序到外部程序的确切方式。