我有一个perl脚本来用默认程序启动脚本文件。
system("Start C:\\Temp\\test.jsx"); 它与英文用户名一起工作,但当我将用户名更改为aiЦ中时,它就不起作用了。
另外,没有错误消息出现在我无法调试。
发布于 2017-05-23 10:14:47
Windows上的perl使用所谓的ANSI函数与外界进行接口。这意味着,如果您使用有趣的字符(例如,在美国-英语Windows上的某些土耳其字母),perl将看不到它们。As 我在我的博客上写道
不能将位于Windows代码页之外的字符传递给命令行中的
perl。您是否将代码页设置为65001并将-CA命令行参数设置为perl并不重要:因为perl使用main而不是wmain作为入口点,因此它在ANSI代码页中只看到字符。 例如: $ chcp 65001 $ perl -CAS -E“@ARGV”şey sey 这是因为ş没有出现在我的笔记本电脑使用的CP 437中。当它到达perl的内部时,它已经成为s。
因此,对于股票perl,没有什么可以做的。我在做一组补丁,但是事情发生了变化。今年夏天我可能还能找到它。
现在,在您的例子中,您正在通过system将“有趣的字符”传递给外部程序。同样的问题也适用。由于perl正在使用用于派生进程等的函数的ANSI版本,因此生成的程序将不会看到Unicode环境。因此,如果您试图使用不包含韩文或日文程式的系统程式码页,我不知道会发生什么。
一旦perl运行,您就无能为力了。从那时起,环境、命令行参数、所有东西都生活在ANSI世界中。可能会有一些古怪的工作,但要做到这一点,我们需要确切地知道'aiЦ中'是如何从perl程序到外部程序的。
https://stackoverflow.com/questions/44127788
复制相似问题