字符编码及文件读取的基础知识.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符编码及文件读取的基础知识

字符编码及文件读取的基础知识1、二进制文件和文本文件首先看二段代码:生成一个二进制文件和一个文本文件。打开一个二进制文件:test.dat,写入整数1234,其对应的十六进制为04?D2。 FILE *pfile;intntest = 1234;if(NULL == (pfile=fopen(test.dat,wb))) {printf(cant write file:test.dat);return(1); }fwrite(ntest,sizeof(int),1,pfile);fclose(pfile);?用ultraedit打开,可以看见:?然后:再次写一个文件: FILE *pfile;intntest = 1234;if(NULL == (pfile=fopen(test.bin,w))) {printf(cant write file:test.dat);return(1); }//fwrite(ntest,sizeof(int),1,pfile);fputs(1234, pfile);fclose(pfile);打开后显示:??  世界上本没有文本文件,只说用的人多了才有了文本文件的概念。所有存储在计算机上的文件都是以二进制比特流的形式存在。有些比特流的特定多少位表示一个能可见的字符(比如说o1100101表示A),那么组成的文件就是通常所说的文本文件,除此之外的就是二进制文件了,二进制文件通常打开都是乱码,是因为你的工具(如记事本等)往往按照一个字节一个字节去读取二进制比特流,而有时候这个字节代表了一个不可见的字符,比如上面的D2。我们平时用的doc,bmp等文件都是二进制文件。2、二进制文件和文本文件的打开方式  文本方式和二进制方式仅仅是一种方式,不是说文本方式用来打开文本文件,二进制方式打开二进制文件。这两种方式的惟一区别就是:当利用文本方式打开文件时,遇到回车换行就转换成’\n’(windows需要转换,而linux系统不需要,这是因为windows与linux表示换行的标识符不一样,前者是\r\n,而后者是\n,与c语言规定的是一样的,在linux下面这两种方式没有区别。而且转化的工作由编译器完成,操作系统只负责处理数据流),而二进制方式没有这种转换。文本文件里的每个字节数据(当然也是用二进制存储在计算机上)一般都表示一个ascii(这里暂时只说ansi文本格式,对于unicode则不同了,后面会讲到),而二进制文件里的每个字节数据可能表示一个ascii也可能不是,当在ascii表中可以找到对应的字符时,你用文本编辑器打开时就能看见对应的字符,如果找不到就是乱码。?fread和fwrite往往用于读取和写入二进制文件,当然也可以读取和写入文本文件;反之,fgets和fputs往往用于文本文件的读取和写入,当然也可以读取和写入二进制文件。一切取决于你写入的数据格式和对读取的内容做什么样的解析。计算机只负责和二进制数据打交道,它不管你的二进制数据表示什么。?? FILE *pfile;charbuf[1024] = {\0};intnCount;if(NULL == (pfile=fopen(test.txt,r)))//if(NULL == (pfile=fopen(test.txt,rb))) {printf(cant write file:test.dat);return(1); }//fread(ntest,sizeof(int),1,pfile);fgets(buf, 1024, pfile);//printf(%d\n,ntest);for (intna=0; na1024 buf[na]!=0; na++) {intntemp = buf[na];ntemp = 255;printf(%0.2x\n,ntemp); }fclose(pfile);?用文本方式打开结果:?用二进制方式打开:3,Ansi/gbk/Unicode/utf-8Ansi:最初是美国制定的一套标准,也就是ansi的ascii,用0-127表示一个字符。?GBK:中国为了支持汉字,用两个字节表示一个汉字。在判断这个字节大于127,说明是一个汉字编码的开始,然后读取下一个字节,组合在一起形成一个汉字。GBK里面小于127的字节表示的含义与ASCII一样。?Unicode:为了统一世界上各个国家的字符编码集,制定了一个统一的编码方案,概括了所有的语言字符,用2个字节表示。?Utf-8:实际上是unicode的一种实现形式。因为unicode只是规定了字符的编码内容,没有规定字符的存储方式。网络上的数据流往往以字节流的形式发送或者接收,utf-8规定了这些字节流的

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档