2011-11-23 4 views
2

내가 PostgreSQL을MS 엑셀에서 데이터를 가져 오기 오전를 사용하여 파이썬에서 포스트 그레스합니다.데이터 가져 오기는 <code>pyodbc</code>를 사용하여 <code>python(2.6)</code>에 pyodbc

직면 한 문제는 :

는 엑셀 소스 등 left single quotation mark(ANSI hex code : 0x91) 같은 문자가 있습니다. 이제 pyodbc를 사용하여 PostgreSQL로 가져 오면 종료되고 오류 DatabaseError: invalid byte sequence for encoding "UTF8": 0x91이 표시됩니다.

내가 시도한 것 : 나는 당분간 decode('unicode_escape')을 사용했다. 그러나 이것은 단순히 관련 문자를 제거/이스케이프하기 때문에 수행 할 수 없습니다.

대체 시험 : 초기에는 유니 코드를 모든 곳에서 디코딩 한 다음 데이터베이스에서 필요할 때 나중에 인코딩합니다. 현재 진행중인 프로젝트의 확장으로 인해이 작업을 수행 할 수도 없습니다.

작업을 수행하기 위해 일부 메소드/프로 시저/내장 함수를 제안 해주십시오.

+0

이 질문에 대한 대답이 있는지 모르겠다. 하지만 당신은 [이 관련 답변] (http://stackoverflow.com/q/964825/146792)을 사용할 수 있습니다. – mac

+0

당신의 노력에 고마워, 고맙습니다. UnicodeDecodeError : 'ascii'코덱은 33 위치에서 바이트 0x92를 디코딩 할 수 없습니다 : 서수가 범위 내에 있지 않습니다 (128). –

답변

1

원본 문서의 실제 인코딩을 확인하십시오. WIN1251 일 수 있습니다. 코드 변환 (예 : iconv) 또는 이에 따라 PostgreSQL의 client_encoding을 설정하십시오.

당신이 pyodbc에서 설정을 (내가 아는하지 않는)이없는 경우, 당신은 항상 일반 SQL 명령을 실행할 수 있습니다 매뉴얼의 장 "Automatic Character Set Conversion Between Server and Client"에서

SET CLIENT_ENCODING TO 'WIN1251'; 

더.

+0

안녕하세요, Erwin . 이미 생성 된 데이터베이스의 인코딩을 필수/상기 인코딩으로 변경할 수 있습니까? –

+0

@SandipAgarwal : 아니요. 동일한 db 클러스터에 다른 인코딩으로 새 데이터베이스 (template0을 기반으로)를 만들 수 있지만 인코딩은 로캘 설정과 호환되어야합니다. [여기에 관련 게시물이 있습니다.] (http://stackoverflow.com/questions/5956163/postgres-databases-with-different-encoding) 저는 이것이 당신의 문제를 해결하는 좋은 아이디어라고 확신하지 못했습니다. –