2013-08-08 1 views
1

를 사용하려면 :스핑크스'라틴어-1 '코덱은 UTF-8 내 체류 지수에 삽입하려고 다음과 같은 오류가

'latin-1' codec can't encode character u'\u2019' in position 126: ordinal not in range(256) 

이 사용되어야한다 UTF-8 라틴 -1이 아닙니다. conf 파일에 다음과 같이 지정했습니다 :

index my_index 
{ 
     type = rt 
     path = /path/my_index 
     rt_field = content 

     charset_type = utf-8 
} 

utf-8 인 데이터베이스에서 삽입 할 값을 선택합니다. 원시 API (API 없음)를 사용하여 파이썬에서 삽입하고 있습니다.

cursor_sphinx.execute("replace into my_index (id, content) values (%s,%s)", (id, content)) 

어떻게 피할 수 있습니까?

+0

스핑크스 포럼에서 언급했듯이 스핑크스는 아닙니다. https://www.google.com/search?q=codec+can't+encode+character+++in+position는 이것이 파이썬 문제라고 제안합니다. AFAIK 파이썬에는 사용해야하는 특정 유니 코드 문자열 유형 u "..."가 있습니다. – barryhunter

+0

python 태그가 추가되었습니다. – barryhunter

+0

'cursor_sphinx' 객체를 어떻게 만들었습니까? 연결시 데이터베이스 인코딩을 지정 했습니까? (데이터베이스에 설정된 올바른 인코딩을 사용하면 전혀 문제가되지 않을 수도 있습니다.) – geoffspear

답변

1

음, 첫 번째 데이터베이스가 utf-8이고 .py 파일이 #coding = UTF를 지정할 때 이것이 필요한 이유는 모르겠지만 content.encode ("utf-8")로 삽입하면 트릭을 만들었습니다. -8

+0

.py의 인코딩 주석은 코드를 작성한 인코딩 만 정의하며 최종 결과에는 아무런 영향을 미치지 않습니다. 귀하의 첫 번째 데이터베이스 커넥터는 명확하게 UTF-8이 아닌 파이썬의 유니 코드 문자열 유형으로 '컨텐츠'데이터를 제공하고 있습니다. 이것은 정상적인 것입니다. – nOw2

+1

latin-1은 무엇이라도 참조 할 수 있습니다. 어쩌면 터미널에 인쇄하고 있으며 터미널의 기본 인코딩은 latin-1입니다. 더 많은 컨텍스트가 없으면 문제가 어디에 있는지 알기가 어렵습니다. – Bakuriu