免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5553 | 回复: 9
打印 上一主题 下一主题

C语言汉字处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-05 22:01 |只看该作者 |倒序浏览
在unix C语言中怎么处理汉字,例如
char str1[21]="a汉b字"
我想把 a汉 这两个字符拷贝到另一个字符数组中,该如何实现?
(请不要告诉我用memcpy(str2,str1,3)这样的写法!!)
另外,C程序怎样才能根据环境中的编码自动处理字符问题
例如locale为zh_CN.gbk,“汉”是作为一个字符,
而locale为en_US.iso88591时,“汉”是作为两个字符处理的?

希望高手指教~

论坛徽章:
0
2 [报告]
发表于 2008-08-05 22:06 |只看该作者
期待高手解答,我曾经做过嵌入式平台字库引擎相关的一些开发,PC上应用也很菜
第一个问题貌似是:
char str1[21]=L"a汉b字";
第二个问题貌似C++才能更具当前设置local去做处理

论坛徽章:
0
3 [报告]
发表于 2008-08-05 22:20 |只看该作者
关于C++的locale处理,可否说得详细一点,有例子不?

论坛徽章:
0
4 [报告]
发表于 2008-08-05 22:57 |只看该作者
google上去找找吧,因为没有做过PC应用开发,我只是有点印象

论坛徽章:
0
5 [报告]
发表于 2008-08-05 23:10 |只看该作者
原帖由 shoei 于 2008-8-5 22:20 发表
关于C++的locale处理,可否说得详细一点,有例子不?

c 设置local example
http://www.cplusplus.com/referen ... cale/setlocale.html

c++ set local example:

char* g_pszOriLocale = setlocale(LC_ALL, NULL); //儲存先前的設定

#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
    setlocale(LC_ALL, "Chinese_Taiwan.950");    //Window環境

#else
   setlocale(LC_ALL, "zh_TW.Big5"); //Linux 環境

#endif
......
setlocale(LC_ALL, g_pszOriLocale);


[ 本帖最后由 dodolo0k 于 2008-8-5 23:12 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-08-06 21:12 |只看该作者
请问这样进行设置后,如何使用呢?具体怎么体现呢?

论坛徽章:
0
7 [报告]
发表于 2008-08-06 21:20 |只看该作者
找C++高手,网上应该也有很多可以参考学习的资料

论坛徽章:
0
8 [报告]
发表于 2008-08-07 00:00 |只看该作者
在处理字符串时不希望字符被拦腰截断,那么就不要使用不定长编码。gbk,utf8什么的都是不定长的。处理的时候先转换成ucs2或ucs4编码,然后想怎么处理怎么处理,最后再转换会你需要的编码。

[ 本帖最后由 baicj 于 2008-8-7 00:02 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-08-07 11:05 |只看该作者
前面的我不知道,后面的汉”是作为两个字符处理的

汉字都是作为两个字符来处理

论坛徽章:
0
10 [报告]
发表于 2008-10-08 16:25 |只看该作者
原帖由 shoei 于 2008-8-5 22:01 发表
在unix C语言中怎么处理汉字,例如
char str1[21]="a汉b字"
我想把 a汉 这两个字符拷贝到另一个字符数组中,该如何实现?
(请不要告诉我用memcpy(str2,str1,3)这样的写法!!)
另外,C程序怎样才能根据环 ...


第一个问题8楼已有正解,具体如何从你的str转换成ucs2或者ucs4的wstr可以man mbstowcs或者考虑使用iconv库实现
第二个问题,实际上在iso88591字符集里面肯定是没有给"汉"做编码的.之所以你有这样的错觉(而locale为en_US.iso88591时,“汉”是作为两个字符处理的),可能你对字符在不同开发语言以及不同字符集的定义不是非常清楚。可能你需要看一下相关资料首先确定字符跟字节的区别。当然也有可能你要表达的意思我理解错了,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP