c语言汉字写入问题及unicode优势

c语言汉字写入问题及unicode优势

ID:32264974

大小:390.50 KB

页数:10页

时间:2019-02-02

c语言汉字写入问题及unicode优势_第1页
c语言汉字写入问题及unicode优势_第2页
c语言汉字写入问题及unicode优势_第3页
c语言汉字写入问题及unicode优势_第4页
c语言汉字写入问题及unicode优势_第5页
资源描述:

《c语言汉字写入问题及unicode优势》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言汉字写入问题及Unicode优势默认分类2009-06-1309:22:13阅读552评论2  字号:大中小 订阅常用的字符编码有以下三种:1、ASCII只支持英文,全部为8位2、DBCS 支持英文和中文,但中文需要两个字节(16位)3、UNICODE支持英文和中文,英文和中文都需要两个字节ASCII是DOS时代的,无法支持中文。DBCS是Win9x支持的字符集。UNICODE是win2k和xp支持的字符集。而汉字的编码目前有GB2312-1980和GB18030-2000,GB2312就是DBCS类型的汉

2、字编码,GB18030就是UNICODE的汉字编码,当然GB18030兼容GB2312,也就是说GB18030也支持DBCS的字符处理方式。虽然GB18030是2000年后强制执行的国家标准,但目前使用最多的还是GB2312编码,而且GB2312也足够处理你所用到的汉字了。还有GBK编码是GB2312的增强版。这里我仅支持GB2312。由于GB2312是中国大陆制定的标准,所以繁体中文并不在GB2312的编码中,如果你的程序需要支持繁体中文,则还需要处理Big5编码。其实也很简单。下面说一下在C中如何处理GB23

3、12编码的汉字。以VC6.0为例,如果声明变量的类型为wchar_t则是UNICODE编码,如果是char则是DBCS编码比如我的一个函数声明是:voidJustify(HDChdc,PTSTRpText,RECT*prc,intiAlign)   其中的pText是PTSTR类型,PTSTR在WINNT.H中有两个定义(WINNT.H中的这段代码我删掉了中间无关的部分)#ifdef UNICODEtypedefLPWSTRPTSTR,LPTSTR;//如果是UNICODE编码,则定义PTSTR为LPWSTR类型

4、#elsetypedefLPSTRPTSTR,LPTSTR;//如果是不是UNICODE编码,则定义PTSTR为LPSTR类型#endifLPSTR定义为CHAR的指针LPSWSTR定义为WCHAR的指针CHAR定义为char类型WCHAR定义为wchar_t类型而wchar_t定义为unsignedshort类型,它是16位,两个字节,无符号短整数"百度"两字的ASCII码分别为:百:B0D9度:B6C8如果要向test_ascii.txt写入"百"字,则可以这样写代码:#includemai

5、n(){FILE*fp1;intascii1,ascii2;fp1=fopen("test_ascii.txt","wb+");ascii1=0xB0;ascii2=0xD9;fwrite(&ascii1,1,1,fp1);fwrite(&ascii2,1,1,fp1);fclose(fp1);}我发现TurboC中:一个int型变量和一个汉字一样,都是占两个字节的,那我们不就可以用一个int型变量来存储一个汉字吗?答案是可以的:这样写代码:#includemain(){FILE*fp1;int

6、ascii;fp1=fopen("test_ascii.txt","wb+");ascii=0xD9*256+0xB0;fwrite(&ascii,2,1,fp1);fclose(fp1);}关于汉字的ASCII码还可以看我的另一篇博客URL编码学习(汉字ASCII查询)一、什么是Unicode  先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符并没有那么多,一般只用前128个(00H

7、—7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H—FFH)被称为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其它符号。  这种字符编码规则显然用来处理英文没有什么问题。但是面对中文、阿拉伯文等复杂的文字,255个字符显然不够用。于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312—80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展

8、ASCII字符来表示,以区分ASCII码部分。  但是这个方法有问题,最大的问题就是中文的文字编码和扩展ASCII码有重叠。而很多软件利用扩展ASCII码的英文制表符来画表格,这样的软件用到中文系统中,这些表格就会被误认作中文字符,出现乱码。  另外,由于各国和各地区都有自己的文字编码规则,它们互相冲突,这给各国和各地区交换信息带来了很大的麻烦。要真正解决这个问题,不能从

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。