Я выполняю этот кусок кода против
Python в Windows
'3.6.8 |Anaconda, Inc.| (default, Feb 21 2019, 18:30:04) [MSC v.1916 64 bit (AMD64)]'
и
Python в Linux
'3.6.6 (default, Mar 29 2019, 00:03:27) \n[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]'
Код записывает несколько байтов в файл, используя режим wb
, а затем читает его как r
простой текст. Я понимаю, что я должен читать в байтах (rb
), но мне любопытно, почему он ломается в Linux при передаче в Windows?
import os
import tempfile
temp_dir = tempfile.mkdtemp()
temp_file = os.path.join(temp_dir, 'write_file')
expected_bytes = bytearray([123, 3, 255, 0, 100])
with open(temp_file, 'wb') as fh:
fh.write(expected_bytes)
with open(temp_file, 'r', newline='') as fh:
actual = fh.read()
Исключение в Linux:
Traceback (most recent call last):
File "<input>", line 11, in <module>
File "/home/.../lib64/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 2: invalid start byte
Отображение кодировки системы по умолчанию (с sys.getdefaultencoding()
) показывает
'utf-8'
на обеих машинах.