Par::Packer打包脚本无法解析UTF-8命令行参数问题及解决
问题现象
- 基于处理Win32::API返回宽字符逻辑编写的脚本
CmdArgs.pl,直接执行perl CmdArgs.pl äö.txt时,可正常解析UTF-8命令行参数; - 通过Par::Packer打包为exe(执行命令
pp -o CmdArgs.exe CmdArgs.pl)后,运行CmdArgs.exe äö.txt,参数显示为??.txt。
环境信息
- 操作系统:Win11 中文系统
- 注册表编码配置:ACP、OEMCP为936,MACCP为10008
- 控制台已执行
chcp 65001切换至UTF-8编码
问题根因
调试确认:打包后的exe调用GetCommandLineW返回的内存中,参数已被替换为问号。该问题属于Par::Packer 1.061版本的已知bug,Roderich Schupp已提交修复代码,但1.061版本未包含此修复。
解决方案
下载Par::Packer源码包,手动编译安装:
- 执行命令
perl Makefile.PL生成编译配置文件 - 执行命令
make编译源码 - 执行命令
make test运行测试用例验证编译正确性 - 执行命令
make install完成安装
内容的提问来源于stack exchange,提问作者fengzyf
相关产品推荐
相关产品推荐

