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

4
我在我的WiX脚本中添加了一个文件,路径名中包含字符“î”。Light.exe会报错:
“提供的字符串包含指定数据库代码页'1252'中不可用的字符”
疑问的字符在Windows-1252编码中为0xEE,即0x00EE Unicode或0xC3AE UTF-8。这些文件位于由heat.exe生成的wxs文件中,而此xml以UTF-8编码。
我认为错误消息来自于它尝试以UTF编码输入字符,而数据库是1252?由于Windows Installer实际上不支持UTF(如WiX文档所述),我应该使用以1252或iso-8859编码的输入xml吗?如果是这样,我能告诉heat.exe使用其输出的另一种编码吗?

我的问题类似于这个问题:Leveraging heat.exe and harvest already localized file names and including them to msi using wix">利用heat.exe和收集本地化的文件名将它们包含到msi中使用wix,但不同之处在于,在那种情况下,字符是“真正”的非ansi字符,而在我的情况下,该字符可以在1252中正确编码,但似乎从utf-8输入文件进行的转换无法工作。

1个回答

1
WiX工具集大致按以下方式验证代码页:
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));
}

可能是NETFX没有正确地翻译那个"i"。在你的XML上明确设置代码页可能会有所帮助。要从heat中执行此操作,您可以尝试使用XSLT(我从未尝试通过XSL更改XML文档代码页,但似乎是可能的)或者对文档进行后期编辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接