UnicodeDecode Ошибка в Django Admin (с использованием postgresql) при использовании специальных символов в Linux - PullRequest
1 голос
/ 22 июня 2011

Я некоторое время без проблем использовал стек Windows psql / django для своего приложения под Windows.

Однако недавно я перешел на linux box, и многие места начали разрушаться.Будучи говорящим по-испански, мое приложение использует много специальных символов, таких как «á» или «ñ».Естественно, я решил, что моя база данных и default_encoding должны быть UTF-8, чтобы избежать каких-либо забавных проблем.

Тем не менее, даже несмотря на то, что у приложения не было проблем с отображением объектов со специальными символами, у администратора возникло много проблем.Всякий раз, когда извлекается элемент, отображаемое имя которого имеет специальные символы, я получаю ужас:

UnicodeDecodeError at /ajax_select/ajax_lookup/images
'ascii' codec can't decode byte 0xc3 in position 35: ordinal not in range(128)

По сути, Django пытается получить unicode() этих элементов и терпит неудачу.Я мог что-то упустить, потому что в моем окне Windows такой проблемы нет, поэтому, по сути:

  1. Кодировка базы данных PostgreSQL в обоих местах - UTF-8 (тип символов и параметры сортировки - нет).Точно так же, но я не думаю, что это должно иметь какое-либо значение: English_United States.1252 против en_US.UTF-8

  2. Apache не виновник (и я непосмотрим, как это может быть), как это происходит и с сервером разработки django.

  3. Django по умолчанию использует UTF-8, что верно, потому что, как я уже сказал, я прекрасно вижу специальные символыв других местах приложения оно просто терпит неудачу в нескольких конкретных сценариях с администратором.

У меня закончились идеи относительно того, что должно быть и как ошибки лежат впосреди административного кода django его сложно отладить, но в основном он вылетает в функции str() или unicode().

Суть проблемы: в windows str('árbol') = 'árbol'. В Linuxstr('árbol') вылетает.

Любые идеи соможет быть очень ценным.

Ответы [ 2 ]

0 голосов
/ 13 августа 2012

Я решил это ужасно, используя django's smart_str () каждую строку, которая может иметь странный символ, и применив фильтр замены к этой новой строке, чтобы каждый символ был заменен его эквивалентом ascii. По большей части это сработало, но некоторые коды выглядели отвратительно. Ааа, c'est la vie.

0 голосов
/ 22 июня 2011

Какой вывод, если вы запустите locale из командной строки? Я подозреваю, что это не установлено в UTF-8.

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