2012-04-04 11 views
3

Ich möchte ein Feld in SQL Server 2008 von Python 2.6 erhalten. Hier ist meine freetds Conf-Datei:UnicodeDecodeError bei Verwendung von Pymssql mit Freetds

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

Hier ist der Code:

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 

Aber es gibt:

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

Der Unicode-Feld in Persisch ist. Die Spur ist wieder für Zeile car = cur.fetchone_asdict()

[Bearbeiten]

Ich habe für Datenbankkollatierung in Datenbankeigenschaften von SQL Server Management Studio überprüft und es ist:

Arabic_CI_AS 

Aber wenn ich, dass in charset gibt es:

LookupError: unknown encoding: Arabic_CI_AS 
+0

Dieser Fehler zu dieser sehr ähnlich zu sein scheint: http://stackoverflow.com/questions/9090915/how-to-read-large-file-with-unicode-in-python-3 –

Antwort

4

Sind Sie extrem sicher, dass SQL Server UTF-8 verwendet (angegeben von Ihrem charset='UTF-8')? In der Regel verwenden die meisten SQL Server-Instanzen eine Microsoft-Codierung (nicht UTF-8), z. B. cp1252 (in den USA).

ein paar Dinge, die Sie die richtige Codierung entdecken helfen können:

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

+0

siehe das Update für weitere Informationen –

+1

Arabic_CI_AS ist der SQL Server-Name für die Sortierung, es gibt nur einen Hinweis auf die zu verwendende Python-Codierung. Verwenden Sie 'cp1256' als Zeichensatz (' cp1256' ist für Windows Arabisch, wie unter http://docs.python.org/library/codecs.html#standard-encodings gezeigt) –

+0

Danke, 'cp1256' funktioniert. –