Я некоторое время без проблем использовал стек 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 такой проблемы нет, поэтому, по сути:
Кодировка базы данных PostgreSQL в обоих местах - UTF-8 (тип символов и параметры сортировки - нет).Точно так же, но я не думаю, что это должно иметь какое-либо значение: English_United States.1252 против en_US.UTF-8
Apache не виновник (и я непосмотрим, как это может быть), как это происходит и с сервером разработки django.
Django по умолчанию использует UTF-8, что верно, потому что, как я уже сказал, я прекрасно вижу специальные символыв других местах приложения оно просто терпит неудачу в нескольких конкретных сценариях с администратором.
У меня закончились идеи относительно того, что должно быть и как ошибки лежат впосреди административного кода django его сложно отладить, но в основном он вылетает в функции str()
или unicode()
.
Суть проблемы: в windows str('árbol')
= 'árbol'. В Linuxstr('árbol')
вылетает.
Любые идеи соможет быть очень ценным.