【发布时间】:2012-10-25 09:07:55
【问题描述】:
我需要调整现有的非 unicode c 项目以显示中文字符。由于截止日期很短,而且我是 C 和编码的新手,为了支持在 gui 应用程序中显示中文文本,我已将系统区域设置更改为简体中文 PRC。这反过来又将项目中的编码(在 Visual Studio 2010 中)更改为简体中文 (GB2312)。
除了特殊字符(例如:度数符号、上标 2 等)显示为问号外,一切正常。我相信这是因为我们过去传递了 \260,即 ascii 表中度数符号的八进制值,这不再等同于 gb2312 表中的任何内容。
在键盘中显示度数符号的工作流程如下:
display_function(数据, '\260' ); //将度数符号的八进制值传递到键盘
此 display_function 用于将整数输入转换为字符串以显示在键盘上:
data->[ pos ] = (char) ch;
基本上我需要让这个(和其他特殊字符)正确显示。有没有办法使用当前设置传递这个符号?
根据 gb23212 的字符列表,该符号是受支持的,因此我目前的想法是计算出该符号的八进制值并保持现有函数不变。这些当前将值作为字符传递。使用下表:
http://ash.jp/code/cn/gb2312tbl.htm。
和下面的公式来获得八进制值:
与行关联的八进制数,乘以 10 并添加到与列关联的八进制数。
我相信这会是A1E0 x 10 + 3 = 414403.
但是,当我尝试将其传递给 display_function 时,我得到“错误 C2022:'268':对于字符来说太大”。
我做错了吗?我不希望更改现有函数,因为它们已被广泛使用,但我是否需要更改函数以使用宽字符?
如果以上内容令人费解并且充满了不正确的假设,我们深表歉意!一两个星期以来,我一直在努力解决这个问题,而编码、字符集和语言环境似乎变得越来越混乱!
提前致谢
【问题讨论】: