Python 在 Windows 环境下, write 后,直接 read,会出现乱码问题
Python 在 Windows 环境下, write 后,直接 read,会出现乱码问题如下:
fo = open("foo.txt", "w+") fo.write('www.runoob.com') print fo.read()
运行结果会出现一堆乱码,我们会初步判断为编码问题, 但其实并不是编码问题, 而是 EOF 的问题,也就是指针的位置问题,当我们以 w+ 开启文件读写模式的时候,由于是 w,所以文件会被清空,也就是文件为空,初始状态指针为 0 ,也就是初始即为 EOF 位置。
当我们写入字符串 www.runboon.com 后,指针的位置为 15,文件在缓存中的的内容为 www.runboon.com[EOF],指针的最后位置为 15, 所以直接 open 的时候会默认跳过 15,直到读取到了前一个 EOF 为止,所以你会得到缓存中的一堆乱码。
Python 是使用 fopen/fread/fwrite 这系列函数来读写文件的,经查阅 MSDN:http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx 经查阅, 里面有一句对写入后读取操作的一句表述:When you switch from writing to reading, you must use an intervening call to either fflush or to a file positioning function. 这句话给出了解决方法, 也就是write后执行read方法我们需要先执行flush()方法或指定一个文件读取为止。
改进以后的代码如下:
fo = open("foo.txt", "w+")
fo.write('www.runoob.com')
fo.flush()
fo.seek(0)#指定指针为止为文件开头
print fo.read()
读取乱码问题完美解决。

浙公网安备 33010602011771号