2013-07-08 3 views
2

회사에서 내부적으로 만든 XML 파일을 구문 분석하려고합니다. 이 파일은 UTF-16으로 인코딩되어 있지만 필자가 작성한 Python 스크립트에 오류가 발생합니다 (아래 참조). 나는 파일이나 스크립트에 문제가 있는지 알아 내려고하고있다. 인코딩을 확인하는 방법이 있습니까? 필자의 모든 검색은 잘 구성된 XML을 검사하는 XML 유효성 검사 도구 또는 도구에서 끝났습니다. 나는 XMLSpy를 시도하고 싶었지만 현재는 그것에 접근 할 수 없다.XML 인코딩을 확인하는 방법

오류를 던지고 코드는 'parser.parse'라인 (파이썬 2.7)입니다 : 'INFILE'는이 인스턴스의 XML 해당 파일 'fileEncoding이'입니다

from xml.sax import make_parser 
from xml.sax.handler import ContentHandler 
import codecs 

parser = make_parser() 
curHandler = XmlHandler() 
parser.setContentHandler(curHandler) 

parser.parse(codecs.open(infile, 'rb', fileEncoding)) 

은 ' UTF-16 '.

스크립트는 UTF-8로 인코딩 된 파일에서 제대로 작동합니다. 하지만 UTF-16 파일의 경우 다음과 같은 오류가 발생합니다.

xml.sax._exceptions.SAXParseException: XmlFile.xml:1:30: encoding specified in XML declaration is incorrect 

죄송하지만 XML을 게시 할 수 없습니다. 그것은 복잡하지는 않지만 여러 외국의 단어/이름을 포함합니다. 현재의 인코딩은 인코딩이 UTF-8이지만 인코딩 속성이 UTF-16으로 설정되어 있다는 것입니다. 이것을 확인하는 방법이 있습니까?

업데이트 : 확인. 그래서 나는 완전히 혼란 스럽다. XML 파일의 인코딩을 UTF-16 대신 UTF-8로 변경했지만 스크립트에서 변경하는 것을 잊었습니다. 스크립트가 예상대로 실행되었습니다. 그래서 파일 인코딩 = 'UTF-8'하지만 연 : 오류없이 예상대로

parser.parse(codecs.open(infile, 'rb', 'UTF-16')) 

작품.

추가 정보 : Win7/Server 2008 환경에서 개발/실행 중입니다.

답변

1

사용자가 16 진수 편집기를 사용하거나 입력 파일의 처음 8 바이트를 덤프하는 프로그램을 작성하십시오. 맨 처음에 Byte order mark (BOM)에 대한

  1. 봐. 그것이 있으면 인코딩입니다.
  2. 그렇지 않으면 볼 수 0x3C (UTF-8), 0x003C (UTF-16) 또는 가능하지만, unlikly의 XML 프롤로그의 0x0000003C (UTF-32) (오프닝 < characterd.에 대한
+0

주셔서 감사합니다 BOM은 인코딩이 UTF-16LE 인 것으로 가정하고 FF FE를 보여주고 있지만 파일이 올바르게 인코딩되었는지 확인하는 방법이 있는지 알아 내려고합니다. – LVerwolf

관련 문제