近日写一个Python的小程序,把一个list通过struct.pack写到文件里,可是每次写出来后,文件都比我写进去的字节数多了2;输出文件前先print出来数据来,都是对的。于是直接用winhex观察文件,发现每个0x0a的直接前,都加入了一个0x0d.
一番冥想后才明白原来我用的file.open是没有用"wb"模式,而只是用了"w".这时作为字符串输出,于是
python聪明的在每个行结尾(0x0a)前加了个0x0d,变成window系统的有效行结束符!
一个不留神,就白费了一天的功夫!
再补一段,在写入文件时,如果字符串不能按ascii编码,应该给定编码名,如cfile.write(str.encode('utf_16_le')。这样,经常出来的非ascii不能编码的警告就没有了。
阅读(3664) | 评论(0) | 转发(0) |