2017-01-28 13 views
0

다른 가져 오기에 관한 질문이 있지만 다른 문제가 발생했습니다. ,DBF 가져 오기 Charmap 오류 파이썬

쉽게 분석을위한 매우 간단합니다, 여기에
"C:\Program Files\Anaconda2\python.exe" D:/Projects/DBFImport/DBFImporter/extractdbf.py 
Traceback (most recent call last): 
    File "D:/Projects/DBFImport/DBFImporter/extractdbf.py", line 17, in <module> 
for record in table.records: 
    File "C:\Program Files\Anaconda2\lib\site-packages\dbfread\dbf.py", line 316, in _iter_records 
for field in self.fields] 
    File "C:\Program Files\Anaconda2\lib\site-packages\dbfread\field_parser.py", line 79, in parse 
return func(field, data) 
    File "C:\Program Files\Anaconda2\lib\site-packages\dbfread\field_parser.py", line 157, in parseM 
return self.decode_text(memo) 
    File "C:\Program Files\Anaconda2\lib\site-packages\dbfread\field_parser.py", line 45, in decode_text 
return decode_text(text, self.encoding, errors=self.char_decode_errors) 
    File "C:\Program Files\Anaconda2\lib\encodings\cp1252.py", line 15, in decode 
return codecs.charmap_decode(input,errors,decoding_table) 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 278: character maps to <undefined> 

코드입니다, 나는 DBF 파일에서 데이터를 가져 오기 위해 노력하고있어, 대부분의 DBF 파일을 작업하는 동안, 나는 나에게 다음과 같은 오류를주고 하나에 달렸다
import pyodbc, os, string 
from dbfread import DBF 

# SQL Server Connection Test 
cnxn = pyodbc.connect('DRIVER={SQLServer};SERVER=***********;DATABASE=TEST_DBFIMPORT;UID=test;PWD=test') 
cursor = cnxn.cursor() 

table = DBF('E:\\Backups\\imp.dbf', lowernames=True) 
for record in table.records: 
    rec1 = record['id'] 
    cursor.execute ("insert into imp(ID) values(?)", rec1) 
cnxn.commit() 

모든 종류의 디코딩을 시도했지만 아무 것도 작동하지 않습니다.

갱신 1 :

<type 'tuple'>: (<type 'exceptions.UnicodeDecodeError'>, UnicodeDecodeError('charmap', 'Firearms as appraised on May 18, 2011. F.I.E (Firearms Import Export Co.) .26 automatic pistol S/N # AS21212 ----------------- $175.00 Walther (Smith & Wesson) P22, 22LR semi automatic pistol S/N # N052010 -------------- $325.00 Taurus .357 Magnum Model 608 revolver, blue,, 4\xe2\x80\x9d vent rib barrel S/N # LF632765 ------------ $375.00 Colt MKII Series 70 semi automatic pistol, 9mm, blue, pacmeyer grips, S/N # 70S49671 -------- $475.00 Ruger Model 10/22 semi-automatic carbine, 22LR, S/N # 126-90774 ----- $200.00', 278, 279, 'character maps to <undefined>'), None) 
+0

'latin1'을 사용해 보셨나요? –

+0

나는 이것을 시도 할 것이다, 그것은 전에 경험하지 못한 이상한 문제 일 뿐이다. – HMan06

+0

특정 형식이 있습니까? 또는 해독하는 방법? 다른 방법으로 열려고했지만 작동하지 않았고 테이블에 삽입하지 않고 레코드를 읽는 것만으로도 오류가 발생합니다. – HMan06

답변

1

유니 코드 매핑이없는이 몇 가지 코드 포인트 (세, 나는 생각이) 있기 때문에 오류를 얻고있다 - 그들은 단지 빈입니다.

print table 

인코딩을 무시하려면 다음 표를 인쇄하여 테이블 자체에 의해 지정된 파일 인코딩을 볼 수 있습니다

table = dbf.Table('e:/Backups/imp.dbf') # forward slash and backslash both work 

:

당신은 파일을 열 일반적으로 내 dbf 라이브러리를 것 사용 표 자체에 지정 :

table = dbf.Table('e:/Backups/imp.dbf', codepage='...') 

코드 페이지에 'utf8'을 사용할 수 있습니다. dbf 사양의 일부는 아니지만 도움이 될 수 있습니다 (내 용도로 추가 했으므로 아무 것도 보증/보증되지 않습니다.).

+0

알았습니다! 감사! – HMan06