You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:批处理脚本编译含特殊字符ß的Visual Studio项目时出现编码错误的解决方法

求助:批处理脚本编译含特殊字符ß的Visual Studio项目时出现编码错误的解决方法

大家好,我最近碰到个头疼的问题,想请各位大佬支个招:我写了个批处理脚本,用来批量编译一堆Visual Studio项目的Debug和Release版本,脚本代码是这样的:

call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
devenv "%%s" /build Debug
devenv "%%s" /build Release

但只要编译名称里带ß这个特殊字符的项目,就会弹出错误提示:Invalid character in the specified encoding。更糟的是,脚本跑完后,这些项目文件直接被搞坏了——原本正常显示的ß变成了乱码,连手动编译都不行了!

补充下:执行脚本前,项目名称里的ß显示完全正常,手动编译毫无问题;但脚本执行后,ß变成了一堆乱码字符,项目文件直接损坏。

我手里有好几十个带这个字符的项目,总不能一个个手动编译吧?有没有什么解决办法或者变通方案呀?


可能的解决/变通方案:

  • 调整批处理的编码与控制台代码页
    先检查你的批处理文件编码,建议用Notepad++之类的编辑器把它改成UTF-8带BOM格式。然后在脚本最开头加一行切换代码页的命令,把控制台换成支持西欧特殊字符的编码:

    chcp 1252 >nul
    call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
    devenv "%%s" /build Debug
    devenv "%%s" /build Release
    

    1252编码对ß这类德语特殊字符支持非常好,能解决大部分编码不兼容的问题。

  • 换成MSBuild命令编译
    有时候devenv对特殊字符的处理确实不太靠谱,试试微软推荐的MSBuild工具来代替devenv,命令大概是这样的:

    chcp 1252 >nul
    call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
    msbuild "%%s" /p:Configuration=Debug
    msbuild "%%s" /p:Configuration=Release
    

    MSBuild在编码兼容性上表现更好,自动化编译场景下也更稳定。

  • 确认项目文件的编码正确性
    手动打开出问题的项目文件,用编辑器查看它的编码,确保是UTF-8或者Windows-1252这类支持ß的编码,别是纯ASCII或者其他不兼容的编码。如果编码不对,先把项目文件转成正确编码再用脚本编译。

  • 改用PowerShell脚本代替批处理
    批处理的编码问题算是老顽疾了,PowerShell对Unicode的支持要友好得多,你可以把逻辑改成PowerShell脚本试试,比如:

    & "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
    msbuild "%%s" /p:Configuration=Debug
    msbuild "%%s" /p:Configuration=Release
    

    PowerShell默认就能很好地处理特殊字符,大概率能避开这个坑。


备注:内容来源于stack exchange,提问作者TobiLan

火山引擎 最新活动