2011-08-22 38 views
1

我的代碼(由MAKEMSI產生),例如線MSI DB,Visual Basic和CP1252編碼的字符串的問題

oRec.StringData(2) = "A publicitar a aplicação" 

OREC是從MSI數據庫記錄,開設有:

oInstaller = MkObject("WindowsInstaller.Installer") 
oMsi = oInstaller.OpenDatabase(MsiName, msiOpenDatabaseModeDirect) 
oMsi.OpenView(selectQuery) 

執行後並且提交字符串「A publicitar aaplicação」在數據庫中被轉換爲「A publicitar aaplicaçao」(ã被轉換爲a)。我100%肯定數據庫是cp1252編碼,因爲當我編輯領域manualy和插入ã它很好地顯示。任何想法如何解決這個問題?

編輯: 在構建安裝程序在葡萄牙的Windows一切都好

回答

0

什麼是您編輯屬性的計算機的代碼頁?

我不知道VBA是否在內部使用Unicode來存儲字符串。如果是這樣,那麼它應該可以在任何計算機上運行;如果沒有,那麼只有在系統代碼頁支持'ã'的情況下它才能正常工作。

因此,問題的另一部分是源文件本身:按預期工作,應該啓用Unicode(UTF-8或UTF-16),並且解釋器應該處理它。否則,在當前代碼頁與cp1252不兼容的情況下,您會得到意想不到的結果。

檢查設置爲非Unicode程序的語言在Windows的區域設置中。它應該設置爲葡萄牙語。

+0

感謝幫助。你有什麼想法,如何構建兩種編碼的自動安裝程序?即我想一次製作波蘭語(cp1250)安裝程序和portugese(cp1252)。有沒有什麼辦法來禁用vba「字符串」檢查,並將其視爲字節?有沒有辦法阻止這種轉換? –

+0

@Kamil我不知道如何讓VBA使用Unicode字符串,我甚至不知道它是否真的支持它。但是,您可以嘗試以UTF-8編碼保存腳本,以便字符串採用Unicode格式,並且應該可以正常工作:MSI會正確轉換它們。 –