Исправить UnicodeEncodeError, вызванную умными кавычками - PullRequest
1 голос
/ 07 ноября 2011

Я работаю над проектом, который предусматривает автоматическую генерацию документов (через латекс).Человек, создающий эти документы, работает на компьютере с Windows (он работал с Microsoft Word, но теперь он редактирует их в блокноте).В любом случае, я заметил, что иногда после того, как он редактирует документы, весь процесс генерации завершается неудачей из-за Python UnicodeEncodeError.

Я отследил проблему до наборов цитат и апострафов, которые он добавляет в документ.Я много читал об этой ошибке, но я не уверен, как лучше всего решить эту проблему в python.

Это приложение Django, поэтому я попытался использовать force_unicode, smart_str и т. Д. Из django..utils.encode, но это не сработало.Я понятия не имею, почему символы, которые он добавляет, отличаются от символов, которые я добавляю в другой операционной системе.

Может кто-нибудь пожалуйста

  1. объяснить, что происходит
  2. предложение лучшее решение проблемы

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Невозможно решить эту проблему, не увидев некоторый код.Но по моему опыту, девять раз из десяти ошибок Юникода в Django вызваны методом __unicode__, который фактически не возвращает Юникод.

Например:

def __unicode__(self):
   return 'foo %s' % self.bar

Поскольку строка является строкой байтов, а не юникодом, она будет ужасно ломаться всякий раз, когда поле bar содержит текст вне ASCII.Должно быть:

   return u'foo %s' % self.bar
1 голос
/ 07 ноября 2011

Существует большая вероятность того, что проблемные кавычки используют нестандартные Windows-1252 назначения кодовых точек.Попробуйте изменить все экземпляры "latin1" и / или "iso-8859-1" в приложении django на "windows-1252".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...