непечатная строка Python Unicode - PullRequest
0 голосов
/ 24 октября 2018

Я извлек некоторую информацию exif из изображения и получил следующее:

{ ...
37510: u'D2\nArbeitsamt\n\xc3\x84nderungsbescheid'
...}

Я ожидал, что это будет

{ ...
37510: u'D2\nArbeitsamt\nÄnderungsbescheid'
... }

Мне нужно преобразовать значение в str, ноя не мог управлять этим, чтобы работать.Я всегда получаю что-то вроде (используя python27)

UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128)

Любые идеи, как я могу справиться с этим?

ОБНОВЛЕНИЕ:

Я пробовал с python3, и теперь ошибкаброшен, но результат теперь

{ ...
37510: 'D2\nArbeitsamt\nÃ\x84nderungsbescheid',
... }

, который все еще не ожидаемый.

1 Ответ

0 голосов
/ 24 октября 2018

Кажется, что это utf8, который был неправильно декодирован как latin1, а затем помещен в строку Unicode.Вы можете использовать .encode('iso8859-1') для отмены неправильного декодирования.

>>> my_dictionary = {37510: u'D2\nArbeitsamt\n\xc3\x84nderungsbescheid'}
>>> print(my_dictionary[37510].encode('iso8859-1'))
D2
Arbeitsamt
Änderungsbescheid

Вы можете распечатать его очень хорошо сейчас, но затем вы можете также декодировать его как Unicode, чтобы он получился с правильным типом для дальнейшегообработка:

>>> type(my_dictionary[37510].encode('iso8859-1'))
<type 'str'>
>>> print(my_dictionary[37510].encode('iso8859-1').decode('utf8'))
D2
Arbeitsamt
Änderungsbescheid
>>> type(my_dictionary[37510].encode('iso8859-1').decode('utf8'))
<type 'unicode'>
...