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