2011-03-11 3 views
2

큰 XML 파일 집합에 잘못된 인코딩이 정의되어 있습니다. 그것은 utf - 8이어야하지만 내용은 라틴어 - 1 문자가있는 곳곳에 있습니다. 이 콘텐츠를 파싱하는 가장 좋은 방법은 무엇입니까?ElementTree로 잘못된 XML 파일에 대한 인코딩 강제

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

편집 :이 어도비 인디자인 IDML 파일과 함께 일어나고, 그것은 "내용"텍스트는 라틴어-1을 가지고 있지만 나머지는 UTF-8이 될 수 보인다. 나는 utf-8로 정상적인 파싱을 선호하고, Content의 유니 코드 텍스트 청크를 utf-8로 다시 인코딩 한 다음 latin-1로 다시 파싱합니다. 이 얼마나 엉망 이죠. ಠ_ಠ

답변

2

당신은 XML에 지정된 인코딩을 재정의 할 수 있습니다 다음 해외 거주자 파서를 기반으로 XML 소스 데이터에 대한

class xml.etree.ElementTree.XMLParser(html=0, target=None, encoding=None) 

Element 구조 빌더, 을. html은 미리 정의 된 HTML 엔터티입니다. 이 플래그는 현재 구현에서 지원하지 않는 입니다. target은 대상이 입니다. 생략하면 빌더는 표준 TreeBuilder 클래스의 인스턴스를 사용합니다. 1 인코딩은 선택 사항입니다. 입니다. 주어진 경우 값은 XML 파일 에 지정된 인코딩을 무시합니다.

docs

+0

아, 시도했지만 오류가 발생했습니다. 파이썬 2.7에서 새로운 것 같습니다. 감사 – alecco

1

구문 분석 중에 인코딩 문제를 처리하지 말고 문제가되는 파일을 사전 처리하십시오. 당신이 그것을 구문 분석 할 때

+0

내가 생각하고 파일의 진짜 UTF-8 물건이있을 수 있습니다보다 더 복잡 할 수 있습니다. 유니 코드에서 utf-8로 인코딩을 해제 한 다음 일어날 수있는 특정 장소에 대해 latin-1에 강제로 다시 파싱해야합니다. – alecco