2013-03-18 13 views
1

<?xml version="1.0" encoding="iso-8859-2"?>으로 시작하는 XML 파일이 있습니다. is이되는 InputStream과 handler는 어떤 임의의 핸들러SAXException iso-8859-2

SAXParserFactory.newInstance().newSAXParser().parse(is, handler); 

: 나는 그것을 다음과 같은 방법을 참조하십시오.

<![CDATA[something °]]> 

, 파서가해야 캐릭터 세트 ISO-8859-2을 사용 :

org.apache.harmony.xml.ExpatParser$ParseException: At line 41152, column 17: not well-formed (invalid token) 

는 사실이 같은 CDATA 안에 그 위치에서도 기호가 : 그 때 나는이 예외가 이 문자를 포함하여 거의 모든 문자를 허용합니다. 이것은 사실이 아닌 것처럼 보입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집하는 것은

나는 안드로이드에이 모든 일을 해요.

이상한 : 파서가 인코딩 속성을 완전히 무시한 것 같습니다. 난 헤더를 그대로두고 UTF-8로 파일을 변환하고 지금 내 프로그램은 오류없이 읽을 수 있습니다. 왜 그거야 ??

(나는이 같은의 InputStream을 만들고 있어요 :.이 오류가 될 수 있도록 독자없이 new BufferedInputStream(new FileInputStream(filename)), 즉)

+3

데이터가 실제로 ISO-8859-2로 올바르게 인코딩 되었습니까? –

+0

[Wikipedia] (https://en.wikipedia.org/wiki/ISO/IEC_8859-2)에 따르면이 문자는 ISO-8859-2에서 B0로 인코딩됩니다. 파일에서 해당 위치의 실제 바이트입니까? –

+0

네, 메모장 ++에서 열었습니다. "ANSI 인코딩"이라고 말하면 헝가리 창을 가지고 있습니다. – szali

답변

0

나는 수동으로 인코딩을 인식하여 오류를 해결했다. 나는 XML 헤더를 엿보고 encoding 속성 (사용 가능한 경우)을 찾고 문자열로 추출하여 Charset.forName()에서 Java Charset 객체를 만든 다음 주어진 인코딩과 Reader를 통해 InputSource를 다음과 같이 작성했습니다.

String encoding; 
Charset charset; 
[...] 
    Reader reader = new BufferedReader(new InputStreamReader(inputStream, charset)); 
    InputSource inputSource = new InputSource(reader); 
    inputSource.setEncoding(encoding); 
    SAXParserFactory.newInstance().newSAXParser().parse(inputSource, myHandler); 

불행히도 나는 파서가 인코딩을 자동으로 인식하지 못하는 이유를 모르겠습니다.