2012-04-04 2 views
3

파이썬 2.6에서 SQL 서버 2008에서 필드를 가져오고 싶습니다. 여기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 

유니 코드 필드는 페르시아어이다. 추적은 다시 라인을위한 car = cur.fetchone_asdict()

[편집]

내가 SQL 서버 관리 스튜디오에서 데이터베이스 속성에서 데이터베이스 데이터 정렬을 검사하고 그것이 :

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 이름이며 사용할 파이썬 인코딩에 대한 힌트 만 제공합니다. charset으로'cp1256'을 사용해보십시오 ('cp1256'은 http://docs.python.org/library/codecs.html#standard-encodings에서 볼 수있는 바와 같이 Windows 아랍어 용입니다) –

+0

고맙습니다. 'cp1256'이 작동합니다. –