2

I have a legacy application that uses Window's old MBCS. The software is international, and uses code pages to make it work for other languages. I've read that Chinese contains multibyte characters. My question is, which ones and how do I generate them on a computer in the USA? I need this for testing.

4

2 回答 2

0

我认为MBCS的标准在日本和中国、韩国是有区别的。这取决于每个国家/地区的语言。尽管每个国家/地区的 Windows 操作系统都可以使用它,例如 Windows 7、xp。您应该更改控制面板上的语言选项。

于 2016-02-20T12:42:14.350 回答
-1

你现在应该写的是 Unicode 应用程序,它们不必担心 MBCS 编码。我的意思是,当然,有使用可变长度编码的 Unicode 字符,例如 UTF-16 中的代理,但你不应该做任何特殊的事情来使这些工作。如果您想用您的应用程序测试它们,只需在网络上查找 Unicode 字符表。

在您的情况下,您实际上正在使用旧的非 Unicode 应用程序。这些使用默认系统代码页。旧版 Windows 应用程序支持的唯一多字节字符集 (MBCS) 是双字节字符集 (DBCS),尤其是中文、日文和韩文:

  • 日文 Shift-JIS ( 932 )
  • 简体中文GBK(936
  • 韩语 ( 949 )
  • 繁体中文 Big5 ( 950 )

既然您在问这个问题,我假设您不会说任何这些语言,也没有将您的系统配置为使用其中任何一种。这意味着您需要将系统的默认代码页更改为其中之一。您可能希望在 VM 中执行此操作。为此,请打开“区域”控制面板(如何找到它取决于您的 Windows 版本),选择“管理”选项卡,然后单击“更改系统区域设置”。进行此更改后,您需要重新启动。

我听说您可以使用 Microsoft 的AppLocale 实用程序来更改单个应用程序的代码页,但它确实存在一些限制和兼容性问题。我自己从未尝试过。我也不认为它适用于较新版本的 Windows。最后支持的版本是 Windows XP/Server 2003。我建议坚持使用适当本地化的 VM。

同样,您可以在线找到这些代码页支持的字符表(参见下面的链接),或者在本地化安装中使用字符映射实用程序。正如 Hans 在评论中建议的那样,一种更简单的方法可能是从 Internet 上的网页复制和粘贴简体中文文本(例如,对于 CP 936)。

就技术实现而言,DBCS 将字符编码为两个字节。第一个(前导)字节表示它和后面的字节将被解释为单个字符。MBCS 感知函数(_mbs在 Microsoft 的字符串操作标头中具有前缀)识别这一点并相应地处理字符。前导字节是专门为每个代码页保留和定义的。例如,CP 936(简体中文)使用 0x81 到 0xFE 作为前导字节,而CP 932(日语)使用 0x81 到 0x9F 作为前导字节. 如果您使用旨在处理 MBCS 的字符串函数,则应该没有问题。如果您不小心退回到朴素的 ACSII 风格的字符串操作,遍历字节并将它们视为单个字符,那么您只会遇到困难。

但是,如果可行的话,你真的应该强烈考虑升级应用程序以支持 Unicode。显然不能保证它会很容易,但它不会比修复遗留的非 Unicode 应用程序中缺乏对 MBCS 代码页的支持更难,而且作为奖励,你花在这样做上的时间会付出很多更多的红利。

于 2016-02-21T07:19:32.010 回答