2011-11-02 4 views
3

sqlalchemy 결과에서 패턴을 검색하려고합니다 (실제로 'like'또는 'op'('regexp') (패턴)로 필터링합니다.) 어딘가 정규식 이식 -) - - 문자열 및 검색 문자열은 아마도 히브리어 모두, 그리고 (어쩌면 내가 틀렸다 유니 나는 re.search(r,c)을 수행 할 때 r = u'לבן'c = u'לבן, ורוד, ' 내가 SRE.match 객체 를 얻을 하지만 난 쿼리 할 때이상한 파이썬 정규식 동작 - 유니 코드 또는 sqlalchemy에 연결됨

f = session.query(classname) 
c = f[0].color 

c는 나에게 제공 : DB 같은

'\xd7\x9c\xd7\x91\xd7\x9f,\xd7\x95\xd7\xa8\xd7\x95\xd7\x93,' 

또는

לבן,ורוד, 

print (c): practicaly 동일하지만 re.search(r,c) 실행은 나에게 일치하는 객체를 제공합니다. 난 unicode(c) 유니 코드 변환을하려고 유니 문제 의심 및 I는 'UnicodeDecodeError를'얻기 때문에

아스키 '코덱 위치 0 바이트 0xd7를 디코딩 할 수 서수'I 수단 추측되는이 이미 유니 코드 문자열 - 그래서 여기에 잡은거야? sqlalchemy 'like'을 사용하는 편이 좋겠지 만 거기에서 같은 문제가 발생합니다. (예를 들어 데이터에 문자열이 포함되어 있음을 보여 주었기 때문에)

어떻게 든 검색 문자열을 변환해야합니까? 이것은 유니 코드와 관련이 있습니까? 다른 것?

DB를 테이블 (내가 quering있어하는) 조합이

답변

2

'\xd7\x9c\xd7\x91\xd7\x9f,\xd7\x95\xd7\xa8\xd7\x95\xd7\x93, utf8_unicode_ci입니다 문자열 u'לבן, ורוד, '의 인코딩 된 표현입니다. 따라서 두 번째 예제에서 작성해야합니다 re.search(r,c.decode('utf-8')) 인코딩 매개 변수 설정을 제외하고 거의 동일하게 수행하려고합니다. 그것은 파이썬 시도 아스키 인코딩

3
c = f[0].color 

는 유니 코드 문자열을 반환하지 않습니다하게 (또는 repr() 문자열의 u'...' 종류를 보여줄 것입니다)하지만, UTF-8 인코딩 된 문자열.

는 콘솔 히브리어 문자를 표시 할 수있는 경우

u'\u05dc\u05d1\u05df,\u05d5\u05e8\u05d5\u05d3,' 

또는

u'לבן,ורוד,' 

결과

c = f[0].color.decode("utf-8") 

보십시오.

+1

죄송합니다. 나는 이미 그 길을 걸었습니다.이 코드는 작동하지 않습니다. (재검사 만하면됩니다.) 디코딩 후에 유니 코드 객체를 얻지 만, re.search는 여전히 'none'을 제공합니다. – alonisser