python - 将 pymssql 与 freetds 一起使用时出现 UnicodeDecodeError

标签 python unicode freetds pymssql

我想从 python 2.6 获取 SQL Server 2008 中的一个字段。这是我的 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 server management studio 检查了数据库属性中的数据库排序规则,它是:

Arabic_CI_AS

但是当我在字符集中使用它时,它会给出:

LookupError: unknown encoding: Arabic_CI_AS

最佳答案

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

一些可以帮助您发现正确编码的事情:

SELECT DATABASEPROPERTYEX('dbname', 'Collat​​ion') SQLCollat​​ion

关于python - 将 pymssql 与 freetds 一起使用时出现 UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010994/

相关文章:

php - 使用 mssql 方法(Mac OS X 上的 FreeTDS、PHP 和 Apache)

php - 我需要重新编译/安装 php 来添加 mssql 扩展吗?

Python 数据类,default_factory 包含列表的默认字典列表的正确方法?

来自两个数组的 Python linspace 限制

php - 在php中读取unicode文件

python编码utf-8

Python2.7 - 在 CentOS 6.3 上 pip install pymssql 失败

python - 如何删除特定类别的标签?

Python 方法采用一个位置参数,但给出了两个

python - 替换 Python 中的非 ASCII 字符 : eg, ' vs. ’