在Python3中将原始字节写入文件会导致意外输出

时间:2016-04-04 05:53:45

标签: python python-3.x file-io byte

所以,我有这段代码:

f = open("crash.txt", "w")
junk = ("\xCC" * 1028)
f.write(junk)
f.close()

当我在Windows(3.5.1)上运行时,我得到一个重复的文件" CC" s作为十六进制字符。这是预期的。

但是,在Linux(Python 3.4.2)上运行它,我会重复" c38c" s作为十六进制字符。

我不明白Linux上的输出。为什么会发生这种情况,我该如何解决它。

1 个答案:

答案 0 :(得分:1)

您不是在写原始字节。默认情况下,Python 3使用Unicode字符串,并且必须对这些字符串进行编码以将其写入文件。此外,默认情况下,open()使用文本模式,用于编码文本的编码为locale.getpreferredencoding()。在美国Windows上,即cp1252,但在Linux上,通常为utf8

b'\xc3\x8c' '\xcc'编码utf8

b'\xcc' '\xcc'编码cp1252

以二进制模式打开文件并写入字节字符串而不是Unicode来写“raw”字节。

with open("crash.txt", "wb") as f:
    junk = b"\xCC" * 1028
    f.write(junk)