Python, Django и pyodbc: недопустимые символы - PullRequest
1 голос
/ 22 марта 2011

Я подключаюсь к базе данных сервера MS SQL, используя pyodbc. Я получаю следующую ошибку:

invalid byte sequence for encoding "UTF8": 0x93
HINT:  This error can also happen if the byte sequence does not match the  
encoding expected by the server, which is controlled by "client_encoding".

База данных SQL кодируется с использованием Latin1, и я использую postgres с django, который ожидает UTF8.

Я очень плохо знаком с использованием pyodbc и не могу решить эту проблему. Я попытался отфильтровать кучу поисков Google, но безуспешно. Некоторая помощь будет с благодарностью.

EDIT

База данных Postgres является основной базой данных для проекта. Я хочу иметь возможность получать данные с SQL Server. Этот процесс будет выполняться не часто, хотя ...

Точка, в которой возникает ошибка, - это чтение из SQL Server db

1 Ответ

3 голосов
/ 23 марта 2011

Вы дали почти никаких подсказок, но разумное предположение следующее:

Вам необходимо декодировать данные MS SQL Server в Unicode, используя правильную кодировку и (не обязательно сразу)закодируйте его как UTF-8 для передачи в postgres.

Что заставляет вас думать, что кодировка, используемая в базе данных SQL Server, равна latin1, а не cp125x?Правда latin1 на MS-продукте крайне маловероятно.Ваш ошибочный байт '\x93', когда он декодируется как cp1252 (обычный подозреваемый), дает U + 201C СЛЕДУЮЩУЮ ОТСУТСТВУЮЩУЮ ОТМЕТКУ, обычно используемую, например, в MS Word и обычно вставляемую в данные, которая заканчивается в дБ.Декодирование как latin1 приводит к U + 0093, который является неким загадочным управляющим персонажем, использование которого на практике так же редко, как зубы курицы.

...