2012-09-07 2 views
4

ACII로 인코딩 된 XML 파일이 있습니다.XmlReader의 기본 인코딩이 XmlTextReader의 기본 인코딩과 다르게 작동하는 이유는 무엇입니까?

나는 두 개의 서로 다른 마이크로 소프트 XmlReader를 구현 사용하여 읽기 시도 :

  1. XmlReader.Create(new StreamReader(fileImport.FileContent, true));
  2. new XmlTextReader(fileImport.FileContent)

의 인코딩에서는 StreamReader를 사용하여 첫 번째, XmlReader.Create, 좋은 작품 .

두번째 새로운하여 XmlTextReader는 메세지를 발생 XmlException '지정된 인코딩 잘못된 문자.'

당신은 그들이 모두 바이트 순서 마크에서 인코딩을 감지하는데 이들 모두에 대한 MSDN 설명서를 읽고 있다면 그 UTF-8로 후퇴 실패하는 경우. 에서는 StreamReader는하지 않지만

XmlTextReader[msdn] XmlTextReader.Encoding property

StreamReader[msdn] StreamReader constructor

그럼, 왜 잘못된 인코딩 실패하여 XmlTextReader 않는 문서는 모두 구현은 기본적으로 동일하게 인코딩 처리 말할 때 ?

답변

5

그들은 똑같은 방식으로 작동하지만 같은 방식으로 사용하지는 않습니다 ... 첫 번째 경우에는 StreamReader을 매개 변수로 전달하고 두 번째는 파일 위치를 전달합니다. 당신이 TextReader (예 : StreamReader 등)에 XmlReader을 만들 때

, 그것은 항상 TextReader (XML 선언의 인코딩 속성의 값을 무시)의 인코딩을 사용합니다. 경로 나 스트림을 전달하면 XML 선언의 인코딩 속성이 사용됩니다.

신고하신 인코딩이 파일의 실제 인코딩과 일치하지 않습니다. 인코딩을 UTF-8로 선언하지만 실제로는 ANSI로 인코딩 된 XML 파일을 작성하여 문제를 재현 할 수있었습니다. 파일에 비 ASCII 문자가 포함되어 있으면 같은 오류가 발생합니다. 하지만 XML 선언의 인코딩을 수정하면 제대로 작동합니다 ...

+0

응답 주셔서 감사합니다. 선언 된 인코딩에 대한 좋은 생각. 월요일에 사무실로 돌아올 때 다시 확인해 보겠습니다. –

+0

Hmmm ... 루트 노드에 정의 된 인코딩 특성이 없습니다. XmlTextReader가 인코딩을 결정하기 위해 무엇을하는지 잘 모르겠지만 StreamReader 구현으로 실행하려고합니다. 다시 깨지면 문제가 무엇인지 분명히 알 수 있습니다. 감사. –

관련 문제