【发布时间】:2009-10-05 10:58:22
【问题描述】:
在我们的应用程序中,我们使用 VerQueryValue() API 调用来获取版本信息,例如 ProductName 等。对于在繁体中文(代码页 950)机器上运行的某些应用程序,ProductName 具有跨越多个代码页的 Unicode 序列,某些字符翻译不正确。例如,在下面的序列中,
51 00 51 00 6F 8F F6 4E A1 7B 06 74 某些字符返回为无效的 Unicode 0x003f(问号)
在上述序列中,Unicode '8F 6F' 没有被 WinAPI 调用正确拾取和转换,只是填充了无效的 Unicode '00 3F' - 因为 '8F 6F' 仅存在于代码页 936 中(即,简体中文)
.exe 只有一个翻译表 - 作为 '\StringFileInfo\080404B0' - 它仅指繁体中文的语言 ID '804'
应该如何处理这种情况 - 即使转换表只有一个条目,ProductName 也引用 936 和 950 中的 Unicode?是否还有其他 API 调用可供使用?
另外,如果我右键单击 exe 并查看“详细信息”选项卡,它会正确显示产品名称!因此,微软似乎使用了不同的 API 调用或以某种方式 正确处理。我需要知道它是怎么做到的。
提前致谢,
文卡特
【问题讨论】: