2012-12-07 2 views
1

내가 XML 파일을 통해 반복려고을 구문 분석 할 때 lxml이와 (UTF-8 인코딩은 시작),하지만 문자 丂에 다음과 같은 오류 얻을 :lxml이 인코딩 오류 UTF8의 XML을

UnicodeEncodeError을 'cp932를 '코덱이 0 위치의 문자'u4e02 '을 인코딩 할 수 없습니다. 올바르지 않은 멀티 바이트 시퀀스

다른 문자는 올바르게 인쇄됩니다. 코드는 다음과 같습니다

parser = etree.XMLParser(encoding='utf-8') 
tree = etree.parse("filename.xml", parser) 
root = tree.getroot() 
for elem in root: 
    print elem[0].text 

오류는 UTF-8 대신 변화 JIS에서 파일을 구문 분석하지 않았 음을 의미 하는가?

답변

2

UnicodeEncodeError의 stacktrace는 예외가 발생하는 위치를 가리 킵니다. 불행히도 그것을 포함시키지 않았지만 유니 코드 텍스트가 stdout으로 인쇄되는 마지막 줄이 가장 가능성이 큽니다. stdout이 시스템에 cp932 인코딩을 사용한다고 가정합니다.

내 가정이 정확하다면 stdout이 유니 코드 문자 (UTF-8 등)를 나타낼 수있는 인코딩을 사용하도록 환경을 변경하는 것이 좋습니다. (예 : Writing unicode strings via sys.stdout in Python 참조).

+0

아, 그래서 stdouts 인코딩이었습니다. 테스트 용으로 만 사용 했으므로 결국 문제가 없었습니다. D 감사합니다! – usagidon

2

필자는 lxml의 객체화를 사용하여 유사한 상황이 발생했습니다. 여기 내가 어떻게 고칠 수 있었는지.

import unicodedata 
my_name = root.name.text 
if isinstance(my_name, unicode): 
    # Decode to string. 
    my_name = unicodedata.normalize('NFKD', my_name).encode('ascii','ignore') 
+0

'objectify.XML (r.text)'에서 작동하지 않는'r = requests.get (...)'에 대해 완벽하게 작동했습니다. –