在c中显示具有中文语言环境的特殊字符

时间:2012-10-25 09:07:55

标签: c encoding gb2312

我需要调整现有的非unicode c项目来显示中文字符。因为有一个很短的截止日期,而且我是新的(ish)到C和编码我已经走了将sytem语言环境改为简体中文PRC的路线,以支持在gui应用程序中显示中文文本。这反过来又将项目中的编码(在visual studio 2010中)更改为简体中文(GB2312)。

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

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

display_function(data,'\ 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':字符太大了”。

我是不是错了?我不想改变现有的功能,因为它们被广泛使用,但我是否需要更改功能以使用宽字符?

如果上述内容错综复杂且假设不正确,请致歉!我一直试图让我的头围绕这一两个星期,编码,字符集和语言环境似乎变得越来越混乱!

提前致谢

1 个答案:

答案 0 :(得分:1)

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

也许还可以使用其他名称复制它们,以便在其他项目中使用这些函数时为其他用户提供兼容性。

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