2012-04-04 2 views
3

Я хочу получить поле в SQL Server 2008 от python 2.6. Вот мой FreeTDS .conf файл:UnicodeDecodeError при использовании pymssql с freetds

[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 Studio для управления сервером, и это:

Arabic_CI_AS 

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

LookupError: unknown encoding: Arabic_CI_AS 
+0

Эта ошибка, кажется, очень похож на это: HTTP://stackoverflow.com/questions/9090915/how-to-read-large-file-with-unicode-in-python-3 –

ответ

4

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

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

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

+0

см. обновление для получения дополнительной информации –

+1

Arabic_CI_AS - это имя SQL Server для сортировки, оно дает лишь подсказку относительно используемой кодировки Python. Попробуйте использовать 'cp1256' в качестве кодировки (' cp1256' для Windows Arabic, как показано на http://docs.python.org/library/codecs.html#standard-encodings) –

+0

Спасибо, 'cp1256' работает. –