2011-12-24 5 views
1

MySQL SELECT 문을 사용하기 전에 UTF-8로 인코딩 된 문자열을 살균하고 싶습니다.UTF-8 인코딩 된 문자열 살생

query = MySQLdb.escape_string(query) 

하지만,이 라인은

위치 0-2에서 문자를 인코딩 할 수없는 '아스키'코덱 읽는 발생한 예외를 선도하고있다 : 예를 들어

, 나는이 순서를 범위 (128)가 아닙니다.

어떻게 처리 할 수 ​​있습니까?

+1

query = query.encode('utf-8').을 사용하여이를 달성 할 수는 US-ASCII가 아닌 UTF-8입니다. 나는 그것을 명시 적으로'query.encode ("utf-8")' –

답변

3

MySQLdb가 유니 코드 쿼리를 문자열로 인코딩하려고합니다. 이렇게하려면 기본 인코딩 인 ASCII를 사용하고 있습니다.

이제 입력 내용을 ASCII로 인코딩 할 수 없으므로 파이썬에 사용할 인코딩을 알려주면됩니다. utf-8.

당신은 분명히 무언가가 당신의 문자열을 가정 한 것입니다

+0

정확히 내 문제. UTF-8 인코딩을 시작하고 종료해야하며, MySQL을 행복하게 유지하고 다른 모든 사람들을 행복하게 유지해야합니다. – SK9

+0

파이썬이 독자적으로 처리 할 수없는 비 ASCII 유니 코드 문자열을 사용할 때마다 불행하게도 많은 모듈로 항상 이런 일이 발생합니다. MySQLdb 문제의 경우 SQLAlchemy와 같은 ORM 계층을 조사 할 수 있습니다. –

0
query = "こうえん" 
query = MySQLdb.escape_string(unicode(query,'utf-8')) 
+1

과 같이 인코딩하려고 시도 할 것입니다. 이것은 "예외 값 : Unicode가 지원되지 않습니다"를 제공합니다. Python 2.6.6을 사용하고 있습니다. 질문에 도움이되지 않아 "え ん"을 삭제했습니다. – SK9

+0

MySQL에 대한 전역 문자 집합을 설정해야합니까? – SK9

+0

어떤 기능에서 오류가 발생합니까? 'query = unicode (query, 'utf-8')'두 함수를 분리하고 escape 함수에'query'를 전달하십시오. 오류가 발생한 행은 무엇입니까? – FakeRainBrigand

3

예제에서 query은 'str'유형입니다. 문자열 앞에 'u'를 입력하면 'unicode'유형이됩니다.

>>> query = "こうえん" 
>>> print type(query) 
<type 'str'> 
>>> query = u"こうえん" 
>>> print type(query) 
<type 'unicode'> 

이것은 Python 버전 2.x와 3.x의 주요 차이점 중 하나입니다. 3.0부터 모든 문자열은 기본적으로 '유니 코드'입니다.

+0

* 참고 : * 해당 모듈을 설치했다고 생각하지 않지만 일반적인 문제의 일반적인 해결 방법입니다. 나는 그것이 효과가 있기를 바랄 뿐이다. 그러나 그것이 @ Ada의 코드가 아니라면 (또는이 두 가지를 조합하여) 가능할 것이다. – FakeRainBrigand

+0

파이썬 2.6.6을 사용하고 있습니다. 질문에 도움이되지 않아 "え ん"을 삭제했습니다. – SK9

+0

MySQL에 대한 전역 문자 집합을 설정해야합니까? – SK9