我有一个使用Window旧MBCS的遗留应用程序。 该软件是国际化的,并使用代码页使其适用于其他语言。 我读过中文包含多字节字符。 我的问题是,哪些以及如何在美国的计算机上生成它们? 我需要这个进行测试。
我认为MBCS的标准在日本和中国,韩国之间有区别。这取决于每个国家的语言。虽然它可以在每个国家/地区的Windows操作系统使用,例如Windows 7,xp。您应该更改控制面板上的语言选项。
你现在应该写的是Unicode应用程序,它们不必担心MBCS编码。我的意思是,当然,有些 Unicode 字符使用可变长度编码,例如 UTF-16 中的代理项,但您不必做任何特殊的事情来使这些字符正常工作。如果您想使用您的应用程序测试它们,只需在 Web 上查找 Unicode 字符表即可。
在您的情况下,您实际上是在使用旧的非 Unicode 应用程序。它们使用默认的系统代码页。旧版 Windows 应用程序支持的唯一多字节字符集 (MBCS) 是双字节字符集 (DBCS),尤其是中文、日语和韩语:
- 日本移位JIS (932)
- 简体中文 GBK (936)
- 韩语 (949)
- 繁体中文大5 (950)
既然你问这个问题,我假设你不会说这些语言中的任何一种,也没有将你的系统配置为使用其中任何一种。这意味着您需要将系统的默认代码页更改为其中之一。你可能希望在 VM 中执行此操作。为此,请打开"区域"控制面板(如何找到它取决于您的Windows版本),选择"管理"选项卡,然后单击"更改系统区域设置"。进行此更改后,您需要重新启动。
我听说您可以使用Microsoft的AppLocale实用程序来更改单个应用程序的代码页,但它确实存在一些限制和兼容性问题。我自己从来没有尝试过。我也不认为它适用于较新版本的 Windows;最后支持的版本是 Windows XP/Server 2003。我建议坚持使用适当本地化的 VM。
同样,您可以联机查找这些代码页支持的字符表(请参阅下面的链接),也可以使用本地化安装中的字符映射实用工具查找。正如Hans在评论中建议的那样,更简单的方法可能是从互联网上的网页复制和粘贴简体中文文本(例如,对于CP 936)。
就技术实现而言,DBCS 将字符编码为两个字节。第一个(前导)字节表示它和后面的字节将被解释为单个字符。MBCS感知函数(在Microsoft的字符串操作标头中带有_mbs
前缀)识别这一点并相应地处理字符。前导字节是专门为每个代码页保留和定义的。例如,CP 936(简体中文)使用 0x81 到 0xFE 作为前导字节,而 CP 932(日语)使用0x81到0x9F作为前导字节。如果您使用旨在处理 MBCS 的字符串函数,则应该没有问题。只有当你粗心大意,回到天真的 ACSII 风格的字符串操作,遍历字节并将它们视为单个字符时,你才会有困难。
但是,如果可行的话,您应该强烈考虑升级应用程序以支持Unicode。显然,不能保证它会很容易,但它不会比修复遗留的非 Unicode 应用程序中缺乏对 MBCS 代码页的支持更难,而且作为奖励,您花在这样做上的时间将带来更多的回报。