免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: iCoding
打印 上一主题 下一主题

C和汉字编码(两章,欢迎高人指正) [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
21 [报告]
发表于 2011-09-21 18:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
22 [报告]
发表于 2011-09-23 11:11 |只看该作者
回复  iCoding


    这方面的讨论确实极少,所以这个讨论很有意义
pmerofc 发表于 2011-09-21 18:51



    感谢,顶上去先

论坛徽章:
0
23 [报告]
发表于 2011-09-24 23:05 |只看该作者
UPDATE:

把这个帖子贴到了CHINAUNIX和CSDN,很多人给了评论,感谢(在CHINAUNIX顶到首页了,开心,嘿嘿)也蛮有启发的,整理如下:

1) GBK编码仍然是2字节编码,不过第一个字节高位设置为1第二个字节高位用于表示数据,因此GBK能表示30000多个字符

2) 之前说GB编码里的ASCII码如何如何,其实不准确,其实只是GB为了兼容ASCII码,让基本的英文字符和ASCII码保持一致
3) 有回复说为什么可以正常输出printf("中文"),其实是中文OS做的工作,想想也对,printf只是将unicode或者gb2312字节传输给处理程序(是啥不是很清楚?)它完成总字节编码到屏幕打印的工作,那么setlocale实际完成的是什么呢?其实是编码转换,中文编码有多种,我们需要数据的输入的编码是哪种,这样的话才可以采用相应的转换方法转换成为unicode,输出的时候也是如吃

./app > 1.txt
wchar_t cstr[LEN];
...
wprintf(L"%ls\n",cstr);

重定向输出到文件的时候,其实我们就能看见输出的字节到底是些什么当setlocale不一样时,产生的输出也不一样,这样其实说明了setlocale影响了wprintf的编码转换
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP