- 论坛徽章:
- 0
|
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的编码转换 |
|