当前位置: 主页 > 日志 > Python >

怪异的OX1A

先看一个测试,看下图:

测试环境:Windows(这个很重要,后面会说)

用Python读取test.txt文件的内容并打印,通过对比UtraEdit里面的内容和open('test.txt').read()打印出来的内容,发现他们竟然杯具的不一样。
Python打印出来的内容怎么被截断了?是Python的Bug?不是,如果你用C++来测试问题依然如此。
 
Stackoverflow上给出了答案:http://stackoverflow.com/questions/7382838/file-reading-problem/
 
原来在Windows环境下0X1A有着特殊的含义,0x1A在ASCII码中代表EOF(0x1A == 26 == ctrl-Z == EOF),即当程序以文本模式读取文件内容时,遇到0X1A就会认为文件结束了。
Windows下的type命令测试结果也是如此,如下图:
 
但在Linux下进行上述测试,内容并没有被截断,如下图:
 
在Windows下如何解决这个问题呢?
以二进制的方式读取(‘rb’)文件,由于二进制方式的输入输出是一一对应的,字符不会产生变化(字符不再具有ASCII码表中的那些特殊含义)。
再看下面测试:
 
关于0X1A的更多文章:
http://blog.csdn.net/megaboy/article/details/533333
http://en.wikipedia.org/wiki/Control-Z
 

[日志信息]

该日志于 2012-01-09 23:47 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “怪异的OX1A” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部