我在我的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输入文件不起作用。
答案 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文档代码页,但似乎可以)或者对文档进行后期编辑。