Как обработать ASCII в Python3.65? - PullRequest
0 голосов
/ 27 июня 2018

есть файл журнала для обработки, полученный с компьютера другой компании. Они используют Python2.7, поэтому файл кодируется ASCII. Но в моей команде мы используем Python3.65. Когда я

fileopen = open(my_file, 'rb')
file_content = fileopen.read()

Я считаю, что file_content автоматически декодируется UTF-8. Как с этим справиться? enter image description here

1 Ответ

0 голосов
/ 27 июня 2018

То, что вы видите, является артефактом отображения данных вашим редактором. Если вы читаете файл в двоичном виде, вы получите те же байты, которые вы написали. Они просто байты, не закодированные как что-либо. Ваш редактор выглядит так, как будто он декодирует строку для отображения ... неправильно.

Ниже я пишу двоичный файл с Python 3.6 и читаю его обратно с 2.7 и 3.6:

Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> open('test.txt','wb').write(b'\x8c\x8d\x91\x8c')
4

Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> open('test.txt','rb').read()
'\x8c\x8d\x91\x8c'

Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> open('test.txt','rb').read()
b'\x8c\x8d\x91\x8c'

В обоих случаях записываются одни и те же четыре байта.

Попробуйте отобразить значение байтов вместо строк:

Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> b = open('test.txt','rb').read()
>>> for c in b:
...  print(hex(c))
...
0x8c
0x8d
0x91
0x8c

Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> b = open('test.txt','rb').read()
>>> for c in b:
...  print hex(ord(c))
...
0x8c
0x8d
0x91
0x8c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...