4

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

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

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

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

我的问题与此类似: 利用 heat.exe 并收获已经本地化的文件名,并使用 wix 将它们包含到 msi但不同之处在于,在这种情况下,字符是“真正的”非 ansi 字符,在我的情况下,字符可以在 1252 中正确编码,但似乎从 utf-8 输入文件的转换不起作用。

4

1 回答 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 上显式设置代码页可能会有所帮助。为此,您可以尝试使用 XSLT(我从未尝试过通过 XSL 更改 XML 文档代码页,但似乎可行)或对文档进行后期编辑。

于 2013-04-22T12:43:14.833 回答