Извлечение байтов из строкового представления байтов в Python 3 - PullRequest
0 голосов
/ 22 ноября 2018

Следующий фрагмент отлично работает при выводе правильного представления символов UTF8:

a = b"Tenemos la Soluci\xc3\xb3n"
a.decode('utf8')
'Tenemos la Solución' # correct output

Но в моем случае фактические байты хранятся в виде строки в базе данных.В таком случае, как мне получить выходные данные с правильным представлением UTF8?

a = "Tenemos la Soluci\xc3\xb3n" # retrieved from Database
b = bytes(a, 'utf8')
b.decode('utf8')
'Tenemos la Solución' # incorrect output

Пожалуйста, предложите, как решить эту проблему.

1 Ответ

0 голосов
/ 22 ноября 2018

У вас есть mojibake , и это происходит, когда, например, текст в кодировке UTF-8 сохраняется в базе данных, настроенной для кодировки ISO-8859-1 или аналогичной.latin1 - это отображение 1: 1 кодовых точек Unicode в эквивалентные байты, при условии, что строка Unicode содержит только U + 0000 до U + 00FF и может использоваться для решения проблемы:

>>> a = "Tenemos la Soluci\xc3\xb3n" # retrieved from Database
>>> a.encode('latin1').decode('utf8')
'Tenemos la Solución'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...