2014-03-01 1 views
1

일부 유니 코드 문자가 포함 된 URL을 검색하는 요청을 사용하여 일부 처리를 원한다. unicode_test_1.html에서 lxml.html 요청과 구문 분석 및 utf-8

r=requests.get(url) 
f=open('unicode_test_1.html','w');f.write(r.content);f.close() 
html = lxml.html.fromstring(r.content) 
htmlOut = lxml.html.tostring(html) 
f=open('unicode_test_2.html','w');f.write(htmlOut);f.close() 

, 모든 문자는 잘 보이지만, unicode_test_2.html에서 일부 문자가 횡설수설로 변경, 그 이유는?

난 후 지금 일하고있어 보인다

html = lxml.html.fromstring(r.text) 
htmlOut = lxml.html.tostring(html,encoding='latin1') 
f=open('unicode_test_2.html','w');f.write(htmlOut);f.close() 

을 시도했다. 하지만 왜 이런 일이 일어나는 지 모르겠다. 항상 latin1을 사용 하는가? r.text와 r.content의 차이점은 무엇이며, encoding='utf-8'을 사용하여 html로 출력 할 수없는 이유는 무엇입니까?

답변

2

파이썬 2 또는 3을 사용하고 있다면 지정하지 않았습니다. 인코딩은 사용중인 버전에 따라 상당히 다르게 처리됩니다. 다음 조언은 어느 정도 보편적입니다.

r.text와 r.content의 차이는 요청 문서에 있습니다. 간단히 말해서 요청은 당신을위한 문자 인코딩을 알아 내고 그것을 해독 한 후에 유니 코드를 반환하려고 시도 할 것입니다. 이것은 r.text를 통해 액세스 할 수 있습니다. 바이트 만 얻으려면 r.content를 사용하십시오.

정말 그립에 인코딩이 필요합니다. 시작하려면 https://www.youtube.com/watch?v=sgHbC6udIqc 번을 읽고 http://www.joelonsoftware.com/articles/Unicode.html을 읽고 또한 "도움이 필요하면 좌절 극복 : Python2에서 유니 코드를 올바르게 사용"을 검색하십시오.

명확히하기 위해 항상 다른 인코딩보다 하나의 인코딩을 사용하는 것처럼 간단하지 않습니다. 바이트 단위로 I/O를 수행하여 유니 코드 샌드위치를 ​​만들고 응용 프로그램에서 유니 코드로 작업하십시오. 바이트 (isinstance (mytext, str))로 시작하면 Unicode로 디코딩 할 인코딩을 알아야합니다. 유니 코드 (isinstance (mytext, unicode))로 시작하면 UTF-8로 인코딩해야합니다. 세계 문자.

편집기, 파일, 서버 및 데이터베이스가 UTF-8로 구성되어 있는지 확인하십시오. 그렇지 않으면 '횡설수설'이 더 많이 발생합니다.

원본 파일과 스크립트 출력을 게시하는 데 도움이 필요하면.

+0

내가 추천 한 읽기/비디오 리소스가 정말로 나를 정리했습니다. 감사. – dmoench