【问题标题】:Non-unicode characters shown as question marks on windows 7 64-bit在 Windows 7 64 位上显示为问号的非 Unicode 字符
【发布时间】:2014-06-21 11:38:10
【问题描述】:

我有一个多语言 MFC 应用程序,它将本地化​​数据存储在 DLL 中的字符串表中。当我在 Windows 7 32 位上以我的母语(波斯语)运行应用程序时,一切正常,并且字符串显示正确。但是在 Windows 7 64 位上,所有文本都变成了问号。
我已经为系统区域设置了适当的值。据我所知,除了 64 位、32 位之外,两个系统之间没有区别。

编辑:

  • 我尝试将字体更改为 Tahoma,但没有成功。然而 检查 64 位和 32 位的差异我注意到它们都 使用相同的Segoe UI 字体,如前所述,运行 32 位版本 没有问题。
  • 我也可以在波斯语中键入、搜索和命名文件夹,而无需使用 问题,只有应用程序有问题。

【问题讨论】:

  • 64位操作系统有语言支持吗?
  • @JerryYYRain 是的,当然。
  • 所有文本,还是只有控制台输出?
  • @rubenvb 没有控制台输出。这是一个 MFC 应用程序,它有 UI,标签、文本框、消息框等中的所有文本都显示为问号。
  • 不是字体问题,缺少的字形显示为矩形,而不是问号。这是一个文本编码问题,您使用的字符在系统代码页中没有表示。仍然依赖代码页是非常低效的,MFC 也将很快停止支持它们。使用有效的 UNICODE 重新构建您的项目。

标签: c++ windows-7 mfc windows-7-x64


【解决方案1】:

原来这不是 64/32 位差异的问题。
除了更改系统区域设置之外,我还必须将 Region and Language>Formats>Format 更改为波斯语。我不知道字符编码与日期/时间格式有什么关系,但它就是这样工作的。

【讨论】:

  • 从 XP(可能是 2000 年)开始,Windows 已经具备运行 Ansi(多字节)应用程序的能力,就好像它们是特定语言的 Unicode。这就是更改区域会导致应用程序运行的原因。正如 Hans Passant 所说,“正确”的解决方案是为 Unicode 编译应用程序,使其适用于所有地区和语言。
  • @user1793036 是的,我知道这一点,但我认为更改语言环境(引用 Windows:This setting controls the language used when displaying text in programs that do not support Unicode.)就足够了。但是,我看不到非 Unicode 和日期/时间格式之间的联系。我读了 Hans 的评论,虽然它是正确的,但这将是我最后的选择。应用程序在很多地方对文件进行读/写,从 UTF-8 更改为 Unicode 会破坏兼容性,或者至少需要付出很多努力。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 2023-03-30
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
相关资源
最近更新 更多