2009-04-30 3 views
3

배포 한 버전의 장고 응용 프로그램을 사용할 때 lxml에 이상한 문제가 있습니다. lxml을 사용하여 서버에서 가져 오는 다른 HTML 페이지를 구문 분석합니다. 이것은 내 자신의 컴퓨터에있는 개발 서버에서 완벽하게 작동하지만, 어떤 이유인지 그것은 UnicodeDecodeError을 서버에 제공합니다.장고와 lxml의 디코딩 문제

('utf8', "\x85why hello there!", 0, 1, 'unexpected code byte') 

나는 (mod_python을 포함) 아파치 LANG='en_US.UTF-8'으로 실행해야 만들었습니다.

나는이 문제에 대한 검색을 시도하고 올바르게 문자열을 해독하는 다른 방법을 시도했지만 그것을 알아낼 수 없습니다.

귀하의 대답에 내 문자열이 hello 또는 뭔가라고 가정 할 수 있습니다.

답변

3

utf-8로 인코딩 된 문자열이 아닙니다. lxml에 전달하기 전에 웹 페이지 디코딩을 시도해야합니다. 페이지를 가져올 때 http 헤더를보고 어떤 인코딩을 사용하는지 확인하십시오.

+0

동의. 시도 "\ x85why hello there!". decode ("utf-8"). 비 유니 코드 코드 (\ x85)가 유니 코드 코드로 변경됩니다. "# - * - coding : utf-8 - * -"(따옴표 제외)를 .py 파일의 맨 위에 추가해야 할 수도 있습니다. – landyman

+0

사실 이것은 아마도 utf-8이 아닌 바이트 문자열을 반환함으로써 발생했을 가능성이 높습니다. 일반적으로 UTF-8 문자열을 생성한다고 주장하는 경우에는 내부적으로 유니 코드 형식을 사용하고, 비트를 입력하기 직전에 utf-8로 인코딩해야합니다. 바이트 문자열을 함께 사용하면 거의 확실하게 어딘가에서 엉망으로 만든 다음 훨씬 나중에 찾을 수 있습니다. FWIW, "\ x85"== "#". –

-2

site.py를 수정하면 이상적인 솔루션이 프로그램의 시작에서 시도하지 때문에 : "\ x85why 안녕하세요"

import sys 
reload(sys) 
sys.setdefaultencoding("utf-8") 
+0

재미있는! 당신은 내 프로그램의 시작이 장고에 무엇인지를 알지 못한다. –

+0

lxml 관련 코드를 호출하기 전에이 코드를 호출하면 문제가 해결됩니다. – ismail

+0

불행히도 ... –