Чтение байтов из файла python и преобразование в String - PullRequest
0 голосов
/ 06 мая 2020

У меня есть файл, содержащий некоторые данные, например: \ xe1 \ x8a \ xa0 \ xe1 \ x88 \ x9b \ xe1 \ x88 \ xad \ xe1 \ x8a \ x9b Как мне прочитать это и записать строковый формат (አማርኛ) в другой файл? А также наоборот?

[\ xe1 \ x8a \ xa0 \ xe1 \ x88 \ x9b \ xe1 \ x88 \ xad \ xe1 \ x8a \ x9b == አማርኛ]

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Это байтовая строка, поэтому вам нужно декодировать ее в строку Unicode utf-8.

b'\xe1\x8a\xa0\xe1\x88\x9b\xe1\x88\xad\xe1\x8a\x9b'.decode('utf8')  

result: 'አማርኛ'

И чтобы закодировать ее обратно в байтовую строку:

'አማርኛ'.encode() 

result: b'\xe1\x8a\xa0\xe1\x88\x9b\xe1\x88\xad\xe1\x8a\x9b'
0 голосов
/ 06 мая 2020

В основном у вас есть байтовая строка, вы можете делать то, о чем говорите, с помощью функций encode () и decode () соответственно, в приведенном ниже примере я начну с печати байтовой строки. А затем я беру байтовую строку и декодирую ее в utf-8 (значение по умолчанию во всех python версиях выше 2.7, если вы сами не указываете версию)

f = open("input.txt","rb")
x = f.read()
print(x) # b'\xe1\x8a\xa0\xe1\x88\x9b\xe1\x88\xad\xe1\x8a\x9b'
print(x.decode()) # አማርኛ

Если вы хотите выполните обратную операцию, вы можете добиться этого, просто закодировав декодированный массив байтов! (Обратите внимание, что в функции open я использую аргумент «rb», который означает (следуя вики) «Открывает файл для чтения только в двоичном формате».

...