Я проанализировал файл и сохранил его содержимое в базе данных с помощью 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. Я могу ошибаться, скажите мне, правда ли.
Решения, очевидно, приветствуются, но подробное объяснение причины и того, что делать, чтобы этого не случилось снова, было бы еще лучше. Меня часто укусила кодировка, которая показывает, что я до сих пор не овладел предметом полностью.