为Mono的xbuild设置源文件字符编码

时间:2011-06-29 12:52:09

标签: character-encoding mono xbuild

我正在生成由VS2010和Mono的xbuild(2.10.2.0)构建的C#源代码。这通常效果很好,到目前为止我只有一个兼容性问题,在这种情况下,我使用的是一个明确指定为未定义行为的“特征”(所以mea culpa)。

现在我遇到了一个问题,我在C#源代码中的字符串文字中有特殊字符。我正在使用UTF-8生成源文件,我正在测试的字符是German sharp s: 0xC39F。这是通过代码写入latin1中的文件,当使用VS(我想要的那个)构建可执行文件时,它最终为0xDF,当使用xbuild构建时,它0xC33F

就我所见,我是否使用.NET或Mono CLR运行可执行文件似乎并不重要。

我当前的怀疑是xbuild没有将源代码读取为UTF-8,因此编译后的代码在字符串文字中已经有了错误的字符。有没有办法明确告诉它?我在xbuild /?上找不到任何内容,xbuild documentation并不是特别全面。如果我错过了记录这一点的正确页面,当然只需要一个链接即可。

所有实验均在Win7 x64上进行。

编辑1:为了澄清,我使用十六进制编辑器确认源代码文件中的字符是真的0xC39F,用VS2010编译时写的字符是0xDF和字符使用xbuild编译时写的是0xC33F

1 个答案:

答案 0 :(得分:2)

您需要修改.csproj文件并添加< CodePage>元素到< PropertyGroup>部分。

您也应该能够使用Visual Studio或MonoDevelop为您执行此操作。

在MonoDevelop中,如果右键单击项目并选择“选项”菜单项,则可以转到“构建/常规”部分,然后会出现“编译器代码页”字段,您可以使用该字段进行选择“UTF-8”。

FWIW,这是当我选择UTF-8时输出的MD:

<代码页与GT; 65001< /代码页与GT;

因此,您只需将其复制/粘贴到< PropertyGroup>

即可