国际支持

大多数传统的 C 和 C++ 代码都假设字符和字符串操作不适用于国际应用程序。 虽然 MFC 和运行时库都支持 Unicode 或 MBCS,但仍需完成一些工作。 为了提供指导,本节讲解了 Visual C++ 中“国际支持”的含义:

  • Unicode 和 MBCS 均通过 MFC 函数参数列表中的可移植数据类型和返回类型启用。 这些类型以适当的方式有条件地定义,具体取决于生产定义的是 _UNICODE 符号还是 _MBCS 符号(表示 DBCS)。 MFC 库的不同变体会自动与应用程序链接,具体取决于生成定义的是这两个符号中的哪一个。

  • 类库代码使用可移植运行时函数和其他方法来确保正确的 Unicode 或 MBCS 行为。

  • 依旧必须在代码中处理某些类型的国际化任务:

    • 使用相同的可移植运行时函数,使 MFC 在任一环境中都可移植。

    • 使用 _T 宏使文本字符串和字符在任一环境中都可移植。 有关详细信息,请参阅 tchar.h 中的一般文本映射

    • 在 MBCS 下分析字符串时采取预防措施。 在 Unicode 下,不需要这些预防措施。 有关详细信息,请参阅 MBCS 编程提示

    • 在应用程序中混合 ANSI (8 位) 和 Unicode (16 位) 字符时,请小心谨慎。 可以在程序的某些部分使用 ANSI 字符,并在其他部分中使用 Unicode 字符,但不能在同一字符串中混合使用它们。

    • 不要在应用程序中硬编码字符串。 而是将字符串添加到应用程序的 .rc 文件,使其成为 STRINGTABLE 资源。 然后,无需更改源代码或重新编译即可本地化应用程序。 有关 STRINGTABLE 资源的详细信息,请参阅字符串编辑器

注意

欧洲和 MBCS 字符集具有一些字符(例如重音字母),字符代码大于 0x80。 因为大多数代码都使用带符号的字符,所以这些大于 0x80 的字符在转换为 int 时进行带符号扩展。 对于数组索引来说,这是一个问题,因为带符号扩展字符(负数)在数组外部进行索引。 使用 MBCS 的语言(如日语)也是唯一的。 由于字符可能包含 1 或 2 个字节,因此应始终同时操作这两个字节。

另请参阅

Unicode 和 MBCS
国际化策略