WiX Installer heat.exe和非ascii文件名

时间:2013-04-17 14:40:18

标签: encoding wix windows-installer

我在我的WiX脚本中添加了一个文件,路径名中包含字符“î”。 Light.exe会抱怨:

  

为字符串提供了在指定的数据库代码页'1252'

中不可用的字符

有问题的字符是Windows-1252编码中的0xEE,即0x00EE Unicode或UTF-8中的0xC3AE。这些文件位于heat.exe生成的wxs文件中,此xml编码为UTF-8。

我认为错误消息来自于它在数据库为1252时尝试以UTF编码输入字符的事实?由于Windows Installer并不真正支持UTF(如WiX documentation中所述),我应该使用1252中编码的输入xml还是iso-8859?如果是这样,我可以告诉heat.exe使用其他编码进行输出吗?

我的问题与此类似: Leveraging heat.exe and harvest already localized file names and including them to msi using wix但区别在于,在这种情况下,字符是“真正的”非ansi charcaters,在我的情况下,字符可以在1252中正确编码,但似乎从utf转换-8输入文件不起作用。

1 个答案:

答案 0 :(得分: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上显式设置代码页可能会有所帮助。要从热量中做到这一点,您可以尝试使用XSLT(我从未尝试过通过XSL更改XML文档代码页,但似乎可以)或者对文档进行后期编辑。