InstallShield期望使用非拉丁字母表字符串表条目的编码是什么?

时间:2010-05-18 13:30:44

标签: encoding localization installshield

我处理的应用程序通过包含多个本地化的单个安装程序进行分发。构建过程包括一个脚本,该脚本使用每种支持语言的翻译更新.ism字符串表。

这适用于法语和德语等语言。但是当测试安装程序,即日语时,文本显示为一系列正方形。它不太可能是字体问题,因为InstallShield提供的字符串显示正常;只有字符串表条目被破坏。所以问题似乎是字符串编码错误。

.ism是XML格式,UTF-8被声明为其编码,所以我假设字符串也需要UTF-8编码。他们真的需要使用目标平台的编码吗?那么,对于具有不同编码的目标,即使用一个GB编码而不是另一个编码的中文系统,是否有任何问题?在这里做什么是正确的?

编辑:使用InstallShield 2009,因为它与2010年之间显然存在差异。

3 个答案:

答案 0 :(得分:2)

在InstallShield 2009及更早版本中,编码是特定于所讨论语言的ANSI编码中的二进制字符串的base-64编码(例如,日语的CP932)。在InstallShield 2010及更高版本中,它仍然会接受或使用UTF-8,具体取决于该表中的其他列。

答案 1 :(得分:1)

我也想弄明白......

我已经在一些Installshield 12(2009年之前)项目中使用了字符串表条目,其中包含的字符超出了base64'target'字符的范围。

例如,日语字符串之一是: !4Pħ&$ 9 !O'< 4环R &\ = !E&安培;!,=``@ $(80!C &安培,L =0!P00!G`&4`;@!T`)(PI##S,+DPR##\,.LP5S!^,%DP`C

经过多次搜索后,我发现Base85 encoding,看起来更接近合理,但尚未证实这是解决方案。

答案 2 :(得分:1)

谢谢(通过他的回答)去Michael Urman,指出我们正确的方向。但这是实际工作(使用InstallShield 2009)算法,由同事反向设计:

  1. 以unicode(多字节字符)字符串
  2. 开头
  3. 将长度写为ism-file
  4. 中的编码长度字段
  5. 将字符串编码为UTF-16-little-endian
  6. 使用uuencode字典的Base-64,除了`(后退)而不是空格。
  7. 将结果写入ism文件,转义XML实体
  8. 请注意,使用uuencode字典的base-64ing与使用uuencode算法不同。标准uuencode生成一组换行符分隔行,包括页眉,页脚和一个或多个数据行,每个数据行以长度字符开头。如果您使用uuencode编解码器实现此功能,则需要将所有内容删除。