Encoding WiX安装程序heat.exe和非ascii文件名

Encoding WiX安装程序heat.exe和非ascii文件名,encoding,wix,windows-installer,Encoding,Wix,Windows Installer,我在WiX脚本中添加了一个路径名中带有字符“î”的文件。Light.exe将投诉: 提供的字符串包含指定数据库代码页“1252”中不可用的字符 所讨论的字符在Windows-1252编码中是0xEE,即在UTF-8中是0x00EE Unicode或0xC3AE。这些文件位于heat.exe生成的wxs文件中,该xml编码为UTF-8 我假设错误消息来自这样一个事实:当数据库是1252时,它试图以UTF编码输入字符?由于Windows Installer并不真正支持UTF(如中所述),我应该使用1

我在WiX脚本中添加了一个路径名中带有字符“î”的文件。Light.exe将投诉:

提供的字符串包含指定数据库代码页“1252”中不可用的字符

所讨论的字符在Windows-1252编码中是0xEE,即在UTF-8中是0x00EE Unicode或0xC3AE。这些文件位于heat.exe生成的wxs文件中,该xml编码为UTF-8

我假设错误消息来自这样一个事实:当数据库是1252时,它试图以UTF编码输入字符?由于Windows Installer并不真正支持UTF(如中所述),我应该使用1252或iso-8859中编码的输入xml吗?如果是,我可以告诉heat.exe对其输出使用另一种编码吗

我的问题与此类似:
但不同之处在于,在这种情况下,字符是“true”非ansi字符,在我的情况下,字符可以在1252中正确编码,但似乎utf-8输入文件的转换不起作用。

WiX工具集验证代码页的方式如下(大致):

NETFX可能没有正确翻译“i”。在XML上显式设置代码页可能会有所帮助。要从heat实现这一点,可以尝试使用XSLT(我从未尝试过通过XSL更改XML文档代码页,但似乎是可能的)或后期编辑文档

encoding = Encoding.GetEncoding(codepage, new EncoderExceptionFallback(),
                                          new DecoderExceptionFallback());
writer = new StreamWriter(idtPath, false, encoding);
try
{
   // GetBytes will throw an exception if any character doesn't
   // match our current encoding
   rowBytes = writer.Encoding.GetBytes(rowString);
}
catch (EncoderFallbackException)
{
    rowBytes = convertEncoding.GetBytes(rowString);

    messageHandler.OnMessage(WixErrors.InvalidStringForCodepage(
                                row.SourceLineNumbers,
                                writer.Encoding.WindowsCodePage));
}