2012-04-04 49 views
3

我想从python 2.6中获取SQL Server 2008中的字段。这是我的freetds的.conf文件:在freetds中使用pymssql时的UnicodeDecodeError

[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 Server Management 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 – 2012-04-04 12:45:02

回答

4

您是否确信SQL Server正在使用UTF-8(指示您的charset='UTF-8')?通常,我所使用的大多数SQL Server实例都使用Microsoft编码(而不是UTF-8),例如cp1252(在美国)。

几件事情,可以帮助您找到正确的编码:

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

+0

查看更新以获取更多信息 – 2012-04-05 06:38:52

+1

Arabic_CI_AS是排序规则的SQL Server名称,它仅提供有关要使用的Python编码的提示。尝试使用'cp1256'作为字符集('cp1256'用于Windows阿拉伯语,如http://docs.python.org/library/codecs.html#standard-encodings所示) – 2012-04-06 13:54:46

+0

谢谢你,'cp1256'的作品。 – 2012-04-07 03:56:45