Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c语言显示具有中文区域设置的特殊字符_C_Encoding_Gb2312 - Fatal编程技术网

用c语言显示具有中文区域设置的特殊字符

用c语言显示具有中文区域设置的特殊字符,c,encoding,gb2312,C,Encoding,Gb2312,我需要修改一个现有的、非unicode的c项目来显示中文字符。因为期限很短,而且我是新手(ish)为了支持gui应用程序中的中文文本显示,我将系统区域设置更改为简体中文PRC。这反过来又将项目中的编码(在visual studio 2010中)更改为简体中文(GB2312) 除了特殊字符(例如:度符号、上标2等)显示为问号外,其他一切都正常工作。我相信这是因为我们过去在ascii表中传递\260,即度符号的八进制值,而这不再等同于gb2312表中的任何内容 在键盘中显示学位符号的工作流程如下:

我需要修改一个现有的、非unicode的c项目来显示中文字符。因为期限很短,而且我是新手(ish)为了支持gui应用程序中的中文文本显示,我将系统区域设置更改为简体中文PRC。这反过来又将项目中的编码(在visual studio 2010中)更改为简体中文(GB2312)

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

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

显示功能(数据“\260”)//将度数符号的八进制值传递到键盘

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

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

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

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

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

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

我相信这将是
A1E0 x 10+3=414403。

然而,当我尝试将其传递给display_函数时,我得到了“error C2022:'268:对于字符来说太大”

我这样做错了吗?我不想改变现有的函数,因为它们被广泛使用,但是我需要改变函数以使用宽字符吗

如果上面的内容很复杂,而且充满了错误的假设,我深表歉意!一两周来,我一直在想这个问题,编码、字符集和区域设置似乎越来越让人困惑


提前感谢

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

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

但是,如果它只是一个项目,那么您可能需要检查在项目的几乎所有位置将“char”替换为“wchar”的可能性