2013-04-17 41 views
4

我在我的WiX腳本中添加了一個文件,路徑名中帶有字符「î」。 Light.exe會抱怨:WiX安裝程序heat.exe和非ASCII文件名

的字符串得到了不在指定的數據庫代碼頁「1252」

有問題的字符是0xEE在Windows-1252編碼可用字符,是,0x00EE Unicode或0xC3AE在UTF-8。這些文件是由heat.exe產生的WXS文件,該XML被編碼爲UTF-8。

我認爲錯誤消息來自於它試圖輸入的字符在UTF編碼,而數據庫是1252這個事實?由於UTF是不是真的Windows安裝程序支持(如WiX documentation描述的),我應該用在1252或ISO-8859編碼輸入XML?如果是這樣,我可以告訴heat.exe爲其輸出使用另一種編碼嗎?

我的問題是類似這樣的: Leveraging heat.exe and harvest already localized file names and including them to msi using wix但不同的是,在這種情況下,字符是「真正的」非ANSI charcaters,在我的情況的字符可以正確地在1252編碼,但似乎從utf-8輸入文件轉換不起作用。

回答

1

的維克斯工具集驗證像這樣(大致)代碼頁:

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文檔代碼頁,但似乎可能)或後編輯文檔。