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