2011-12-14 2 views
0

é (예 : 급성) 문자가 포함 된 XML 문서를 읽었습니다. 문서가 UTF-8로 저장되었으며 이진 파일 판독기가있는 문자가 UTF-8임을 확인했습니다 (c3 + a9). 그러나 처리가 끝나면 문자는 3 바이트 뒤범벅이됩니다 (c3 + 83 + c2).XmlDocument가 UTF-8 '전자 급성'문자를 잘못 읽습니다.

내 생각 엔 .NET이 문자를 UTF-16으로 변환하려고 시도했거나 (이것은 내 생각에 가장 잘 맞았습니다) 문자를 한 개의 1 바이트 문자와 한 개의 2 바이트 UTF-8 문자로 분할했습니다 .

XmlDocuments document = new XmlDocuments(); 
document.Load("z:\\source.xml"); 

가 어떻게이로드해야합니다

는이 같은 문서를로드하는거야? UTF-8로 인코딩 된 스트림을 통해 이것을 읽어야합니까?


내가 UTF-8로 자신을 선언한다로드하고있어 문서를 언급하는 것을 잊었다 [편집]

.

<?xml version="1.0" encoding="utf-8"?> 
+0

"처리 후"= ??? –

+0

나는 아직도 문제가 무엇인지 알아 내려고하고있다. 가장 큰 의문은 UTF-8을 UTF-16 또는 다른 인코딩 문제로로드하는 문제인데 5.1 MB 문서에서 다른 문자가 변경되지 않았기 때문입니다. 그러나 나는 확실히 모른다. 예, "처리 후"- 전체 스크립트 실행이 끝난 후. – Andrew

+1

* 어떻게 출력하고 있습니까?/문자를 확인하고 있습니까? – deceze

답변

3
é

C3 A9으로 UTF-8 인코딩된다. 이 두 바이트는 Windows-1252 코드 페이지 (ANSI 코드 페이지 또는 .NET의 Encoding.Default)에서 é으로 해석됩니다. UTF-8로 다시 인코딩하면 C3 83 C2 A9이되며 이는 "3 바이트 jumble"의 처음 3 바이트와 일치합니다. 어딘가에있는 일부 코드는 Windows-1252 바이트 -> System.String chars -> UTF-8 바이트 변환을 수행하는 것으로 보입니다.

.NET에서 명시 적으로 XML 선언 (XmlDocument.Load이 "작동해야 함")에 명시되어있을 때. NET에서 잘못된 인코딩을 사용하는 것을 본 적이 없으므로 코드에 버그가있는 것으로 의심됩니다.

어떻게 잘못로드되고 있다고 판단합니까? 일단 .NET에서로드되면 바이트가 아닌 문자열을 볼 수 있으므로 올바르지 않은 바이트 시퀀스가 ​​아니라 잘못된 문자 시퀀스를보고한다는 것이 이상하게 보입니다.

+0

당신은 절대적으로 옳습니다. 이것은 매우 혼란 스럽지만 XmlDocument와 관련된 문제가 아닌 파일을 가져 오는 프로세스에 있어야합니다. 당신의 도움을 주셔서 감사합니다. – Andrew