【问题标题】:Displaying special characters with Chinese Locale in c在c中显示带有中文区域设置的特殊字符
【发布时间】: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':对于字符来说太大”。

我做错了吗?我不希望更改现有函数,因为它们已被广泛使用,但我是否需要更改函数以使用宽字符?

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

提前致谢

【问题讨论】:

    标签: c encoding gb2312


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多