Как с помощью Python декодировать эту строку utf-8, выбранную на случайном веб-сайте и сохраненную Django ORM?

Я проанализировал файл и сохранил его содержимое в базе данных с помощью Django. Веб-сайт был полностью на английском языке, поэтому я наивно предположил, что это будет ASCII, и благополучно сохранил текст как unicode.

Вы угадаете остальную часть истории: -)

Когда я печатаю, я получаю обычная ошибка кодировки:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 48: ordinal not in range(128)

Быстрый поиск подсказывает мне, что u '\ u2019' является UTF-8-представлением '.

repr (string) показывает мне это:

"u'his son\\u2019s friend'"

Затем, конечно, я попробовал django.utils.encoding.smart_str и более прямой подход с использованием string.encode ('utf-8'), и в итоге я получил кое-что для печати. К сожалению, в моем терминале (linux UTF-8) он печатается так:

In [76]: repr(string.encode('utf-8'))
Out[76]: "'his son\\xe2\\x80\\x99s friend '"

In [77]: print string.encode('utf-8')
his son�s friend

Не то, что я ожидал. Подозреваю, что я что-то дважды закодировал или пропустил важный момент.

Конечно, исходная кодировка файла не публикуется вместе с файлом. Думаю, я мог бы прочитать заголовки HTTP или спросить веб-мастера, но поскольку \ u2019s выглядит как UTF-8, я предположил, что это был utf-8. Я могу ошибаться, скажите мне, правда ли.

Решения, очевидно, приветствуются, но подробное объяснение причины и того, что делать, чтобы этого не случилось снова, было бы еще лучше. Меня часто укусила кодировка, которая показывает, что я до сих пор не овладел предметом полностью.

5
задан e-satis 7 July 2011 в 06:16
поделиться