为什么MSBuild使用代码页0而不是系统代码页,该如何解决?

尝试使用MSBuild构建文件会给我以下警告:

  

c:\ repo \ file.cpp(58):警告C4819:文件包含字符   无法在当前代码页(0)中表示。保存文件   Unicode格式以防止数据丢失[C:\ repo \ proj.vcxproj]

在构建命令之前,我检查了代码页(cmd chcp),它告诉我当前的代码页为65001。将其设置为其他内容对构建命令没有明显作用。

确切的第58行失败如下:

sprintf(Buffer,"%03d\xb0 %02d' %05.2f\" %s",Splitted.Degree,Splitted.Minutes,Splitted.Seconds,Type.c_str());

据我所见,没有特殊字符。我已经在插入模式下重写了该行,试图清除可能的gremlin字符,并在notepad ++中对其进行了分析,显示了所有符号-什么都没有!我还尝试过将文件保存为unicode(powershell "get-content $file | out-file $file"),使用记事本++将带有和不带有BOM的utf-8转换为utf-8-仍然没有!因此,我正在研究此代码页码怪异的东西。欢迎在评论中尝试其他尝试。

可能会或可能不会影响此的原因是在Docker实例中安装并运行了MSBuild(和VS)(来自Windows基本操作系统)。在常规Windows环境中构建相同的源代码从未遇到此问题。

问题:当系统代码页不是其他字符(例如65001)时,为什么MSBuild使用代码页0,并且该如何解决?


修改

我找到了令人反感的“字符”,或者说是转义序列:\xb0。目的是打印在扩展ASCII表中找到的度数符号。将b更改为7会使警告消失。据我了解,代码页0不支持扩展的ascii范围。

仍然不知道为什么该构建使用代码页0而不是系统。

fc3svsae86 回答:为什么MSBuild使用代码页0而不是系统代码页,该如何解决?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3152852.html

大家都在问