2013-10-21 4 views
0

mysql 데이터베이스에서 일부 행을 가져 오기 위해 저장 프로 시저를 사용하고 있습니다. 이제파이썬 - 유니 코드 문자열 튜플, 인코딩 오류

retarr = [] 
cursor.callproc("employee_get", (-1, -1, -1)) 
for res in cursor.stored_results(): 
    retarr.append(res.fetchall()) 
cursor.close() 
... 

:

나는 아주 기본적인 구문을 사용하여. 일부 데이터 결과는 유니 코드 문자열입니다. 내 데이터베이스에서 문자열 인코딩에 UTF-8을 사용합니다. charset = "utf8"및 use_unicode = True를 사용합니다.

유니 코드 문자가 포함 된 catch 된 데이터 (전체 데이터 튜플)를 인쇄하려고하면 문제가 발생합니다. Like :

for row in retarr[0]: 
    print(row) 

제게 캐치 된 행을 올바르게 인쇄합니다. 그러나 첫 번째 문자는 유니 코드 문자가 없습니다. 그럼 두 번째와 내가 얻을 수있는 유명한 오류 : UnicodeEncodeError : 'ascii'코덱은 문자 '\ u0119'를 위치 19에서 인코딩 할 수 없습니다. 서수는 범위 (128)에 없습니다. 무엇이 문제입니까? 나는 아주 기본적인 것을 놓치고 있다고 믿는다.

파이썬 3.3.2 표준 mysql 커넥터를 사용합니다. OSX.

+1

귀하의 터미널 시스템 일 수 있습니다. 예를 들어 IDLE에서 잘 작동하는'cmd.exe'에서'UnicodeEncodeError'를 얻을 수 있습니다. – cdarke

+0

이상하게도 코모도에 문제가있을 수 있습니다. 내가 터미널 (python3)에서 단순히 '\ u0119'를 인쇄하려고하면 작동하지만 코모도에서 실행하면 예외가 발생합니다. 환경 설정에서 기본 enconding을 UTF-8로 변경했지만 여전히 작동하지 않습니다. –

답변

1

환경 변수 PYTHONIOENCODING에 문제가 있습니다. /etc/launchd.conf (파일 시스템에 파일이 없다)에 설정하고 내 시스템을 재부팅하여 모든 문제를 해결했습니다.

+0

설정 한 값을 표시 할 수 있습니까? – cdarke

+0

확실히 "utf-8"로 정확하게 설정합니다. 그래서 "setenv PYTHONIOENCODING utf-8" "utf_8"이 올바르지 않습니다. 적어도 내 OSX (10.8.4) –

1

유니 코드 개체를 인쇄하려면 어떻게 든 인코딩해야합니다. 기본 인코딩이 ASCII 인 경우 128 ASCII 문자 이외의 문자는 실패합니다. 인코딩을 지정해야 할 수도 있습니다.

print(row.encode('utf-8')) 
+0

필자는 utf-8이 파이썬 3에서 표준 enconding을 사용한다고 생각하지 않는 한 그렇게 생각했습니다. –

+0

게다가 행은 튜플입니다. 인코딩 방법이 없습니다. 코모도에서 utf-8을 기본 인코딩으로 사용하는 방법을 알아야합니다. 문제가있는 것으로 보입니다. –

+1

아, 그 행을 튜플이라고 지정 했어야합니다. 특히 이것은 객체를 전체적으로 출력 할 때 각 멤버에서'repr'을 호출하는 효과가 있다는 것을 의미합니다. 실제로는 제대로 인코딩되지 않습니다. 'print (','. i 행에 대해 i.encode ('utf-8')) join')'을 시도하십시오. –

관련 문제