UnicodeDecodeError при использовании pymssql с freetds

Я хочу получить поле в SQL Server 2008 из python 2.6. Вот мой файл freeTDS .conf:

[ARGSERVER03]
    host = 192.168.1.3
    port = 1433
    tds version = 7.0

Вот код:

conn = pymssql.connect(host='192.168.1.3', user='****', password='****', database='TrafficMonitor', as_dict=True, charset='UTF-8')
i = 0
cur.execute('SELECT * FROM dbo.tblTrafficCounterData')
while i < 10:
    car = cur.fetchone_asdict()
    if car is None:
        break
    c = car['Class']
    print c
    i = i + 1

Но это дает:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xd3 in position 0: invalid continuation byte

Поле Unicode на персидском языке. Обратная трассировка предназначена для строки car = cur.fetchone_asdict()

[Изменить]

Я проверил сопоставление базы данных в свойствах базы данных из студии управления сервером sql, и это:

Arabic_CI_AS

Но когда я использую это в кодировке, это дает:

LookupError: unknown encoding: Arabic_CI_AS

person Majid Azimi    schedule 04.04.2012    source источник
comment
Эта ошибка очень похожа на следующую: stackoverflow.com/questions/9090915/   -  person Thanasis Petsas    schedule 04.04.2012


Ответы (1)


Вы абсолютно уверены, что SQL Server использует UTF-8 (обозначается вашим charset='UTF-8')? Обычно большинство экземпляров SQL Server, с которыми я сталкивался, используют кодировку Microsoft (не UTF-8), например cp1252 (в США).

Несколько вещей, которые могут помочь вам найти правильную кодировку:

SELECT DATABASEPROPERTYEX('dbname', 'Collation') SQLCollation

person John Paulett    schedule 04.04.2012
comment
Arabic_CI_AS — это имя SQL Server для сопоставления, оно лишь дает подсказку относительно используемой кодировки Python. Попробуйте использовать cp1256 в качестве набора символов (cp1256 для арабского языка Windows, как показано в документах. python.org/library/codecs.html#standard-encodings) - person John Paulett; 06.04.2012