Windows上具有本地化用户名的Perl脚本中的问题

时间:2017-05-23 06:57:09

标签: windows perl shell

我有一个perl脚本来启动默认程序的脚本文件。

system("Start C:\\Temp\\test.jsx");  

它使用英文用户名工作文件但是当我将用户名更改为aiЦ中时它不起作用。

也没有出现错误消息,我无法调试。

1 个答案:

答案 0 :(得分:0)

Windows上的

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Ц中'程序到外部程序的确切方式。