2011-08-22 75 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会正确转换它们。 –