2012-04-04 5 views
3

私はSQL Server 2008のフィールドをPython 2.6から取得したいと考えています。ここでfreetdsでpymssqlを使用するときのUnicodeDecodeError

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

コードされています:ここに私のFreeTDSの.confのファイルがある

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の管理スタジオからデータベースのプロパティでデータベースの照合をチェックして、それは次のとおりです。

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インスタンスは、cp1252(米国内)などのMicrosoftエンコーディング(UTF-8ではなく)を使用します。

あなたは正しいエンコーディングを発見助けるかもしれないいくつかのこと:

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

+0

詳細は更新情報をご覧ください –

+1

Arabic_CI_ASは照合のSQL Server名です。使用するPythonエンコーディングのヒントのみを提供します。文字セットとして 'cp1256'を使ってみてください(' cp1256'はWindowsのアラビア語のため、http://docs.python.org/library/codecs.html#standard-encodingsにあります) –

+0

ありがとう、 'cp1256'は動作します。 –

関連する問題