2

我需要调整现有的非 unicode c 项目来显示汉字。由于截止日期很短,而且我是 C 和编码的新手,为了支持在 gui 应用程序中显示中文文本,我已经将系统语言环境更改为简体中文 PRC 的路线。这反过来又将项目中的编码(在 Visual Studio 2010 中)更改为简体中文(GB2312)。

除了特殊字符(例如:度数符号、上标 2 等)显示为问号外,一切正常。我相信这是因为我们过去传递 \260 即 ascii 表中度数符号的八进制值,这不再等同于 gb2312 表中的任何内容。 

在键盘中显示度数符号的工作流程如下: 

显示函数(数据,'\260');//将度数符号的八进制值传递到键盘 

此 display_function 用于将整数输入转换为字符串以在键盘上显示: 

数据->[ pos ] = (char) ch; 

基本上我需要让这个(和其他特殊字符)正确显示。有没有办法使用当前设置传递这个符号? 

根据 gb23212 的字符列表,该符号是受支持的,因此我目前的想法是计算出该符号的八进制值并保持现有函数不变。这些当前将值作为字符传递。使用下表: 

http://ash.jp/code/cn/gb2312tbl.htm。 

和下面的公式来获得八进制值: 

与行关联的八进制数乘以 10 并添加到与列关联的八进制数。 

我相信这会是A1E0 x 10 + 3 = 414403. 

但是,当我尝试将其传递给 display_function 时,我得到“错误 C2022:'268':对于字符来说太大了”。

我要解决这个问题了吗?我不想更改现有函数,因为它们已广泛使用,但我是否需要更改函数以使用宽字符? 

如果以上内容令人费解并且充满了不正确的假设,我们深表歉意!一两个星期以来,我一直在努力解决这个问题,而编码、字符集和语言环境似乎变得越来越混乱!

提前致谢

4

1 回答 1

1

如果当前函数仅支持 8 位字符,并且您需要使用它们来显示 16 位字符,那么您的猜测可能是正确的 - 您可能必须更改函数以使用“wchar”之类的东西而不是“char”。

如果这些功能在其他项目中使用,也可以将它们复制为其他名称以提供其他用户的兼容性。

但是如果它只是一个项目,那么也许你会想要检查在项目的几乎所有地方用“wchar”替换“char”的可能性。

于 2012-10-25T10:39:07.460 回答