Проблема кодирования в проекте Django в Linux, подключенном к БД SQL Server - PullRequest
1 голос
/ 01 марта 2011

У меня есть проект Django (1.2.x), который предназначен для поддержки немецкого и английского языков. Проект размещен на Linux-боксе, за Apache (2.x), используя mod_wsgi. База данных размещается на SQL Server 2005, работающем под Windows, в отдельном блоке. Драйвер ODBC easysoft SQL Server используется для соединения проекта с базой данных.

Я буду использовать одну из моделей в одном из приложений в проекте в качестве примера для этого вопроса. Эта модель содержит TextField. Это поле преобразуется в тип столбца NVARCHAR (MAX) в таблице на сервере SQL. Кодировка для базы данных установлена ​​на «Latin1_General_CI_AS». Источник easysoft unixODBC настроен на использование ConvToUtf = 1, который по существу преобразует данные из кодировки UCS-2 в кодировку UTF-8 при возврате их обратно в приложение из базы данных. ( Я упоминаю здесь UCS-2, потому что я прочитал и обнаружил, что сервер SQL хранит данные Unicode в кодировке UCS-2. )

Однако при просмотре данных, хранящихся в базе данных через панель администратора, немецкие символы преобразуются в странные символы (это видно как при просмотре данных в панели администратора, так и в API, которые возвращают данные в Формат JSON)

Примером является следующее немецкое слово: Geschäftsbedingungen . После того, как он был сохранен в базе данных, он выглядит как: Geschà 101ftsbedingungen .

Версией Python, работающей на Linux, является Python 2.6. Я не уверен, какую другую информацию я должен предоставить, чтобы иметь возможность представить больше контекста в проблеме.

Видимо, я попробовал пару вещей, но безрезультатно. Я ищу какие-либо подсказки о том, как решить эту проблему. Любая помощь с этим будет принята с благодарностью.

ОБНОВЛЕНИЕ : Если найденные мной данные сохраняются непосредственно в базе данных таблица путем редактирования таблицы через Программное обеспечение для управления SQL, данные хорошо отображается как на админке Django страница, а также API. Это озадачивает. Когда данные сохранены через админку странно появляются символы.

1 Ответ

1 голос
/ 07 марта 2011

Последовательность байтов Unicode (и UTF8) для «ä» равна \xc3\xa4, что в однобайтовом мире Latin1 равно «Ã¤».

Это означает, что что-то где-то думает, что этополучать кодировку Latin1, но это не так.

Одно из объяснений состоит в том, что ваш браузер считает, что он отображает Latin1.Я бы проверил заголовок Content-Type, который вы получаете с веб-сервера, и посмотрел, указывает ли он набор символов.Возможно, ваши настройки DEFAULT_CHARSET в Django установлены неправильно.

...