2009-09-25 5 views
1

C 피드 양식의 RSS 피드 (피드 위치는 http://www.bgsvetionik.com/rss/)에서 데이터를 가져 오려고합니다. 다음 코드를 살펴 :UTF-8 인코딩 문제

public static XmlDocument FromUri(string uri) 
    { 

     XmlDocument xmlDoc; 
     WebClient webClient = new WebClient(); 

     using (Stream rssStream = webClient.OpenRead(uri)) 
     { 
      XmlTextReader reader = new XmlTextReader(rssStream); 
      xmlDoc = new XmlDocument(); 
      xmlDoc.XmlResolver = null; 
      xmlDoc.Load(reader); 
     } 
     return xmlDoc; 
    } 

을 xmlDoc.InnerXml이 UTF-8 인코딩으로 XML 정의를 포함하지만, 내가 대신 š 등의

내가 그것을 어떻게 해결할 수 š거야?

답변

3

피드의 데이터가 잘못되었습니다. šCDATA section 안에 있으므로 XML 파서가 엔티티로 처리하지 않습니다.

소스 XML을 보면 엔티티와 "원시"문자가 혼합되어있는 것을 알 수 있습니다. čišćenja 첫 번째 제목의 중간입니다.

수정해야 할 경우 Replace 호출을 사용하여 직접 처리해야합니다. XML 구문 분석기는 의도 한대로 정확하게 처리해야합니다.

편집 : 대체하려면 일 수 있으며 모든 HTML 항목을 하나씩 바꾸거나 하나씩 바꾸거나 실제로 사용중인 항목을 찾으십시오.

물론
string text = element.Value.Replace("š", "š") 
          .Replace(...); 

, 이것은 제대로 실제로이다 아무것도 탈출 정말 실수로 대체 얻을 것이다 텍스트해야한다는 것을 의미 ...하지만 그런 깨진 데이터와 문제 :(

: 그런 다음 할
+0

@ 존 스키켓 훌륭한 답변, 당신은 단지 나를 때려 눕히고 ;-). 사면 나는 약간의 SO.meta를하고 있습니다. (몇 분 안에이 주석을 지울 수 있습니다.)하지만 커뮤니티 위키에서 왜 대답하는지 궁금합니다. 나는 새로 왔으므로이 분야에서 차이점을 인정하고 싶습니다. – mjv

+0

CDATA 섹션에 없다면 XML이 엔티티가 무엇을 의미하는지 전혀 모르기 때문에 단순히 오류가 발생하지는 않습니까? 내가 아는 한 XML은 HTML에서 작동하는 엔티티의 매우 제한된 하위 집합만을 이해합니다. RSS 피드가 설명에 html 콘텐츠를 포함시켜 설명 요소를 악용하는 경우는 드물지 않습니다. – AnthonyWJones

+0

+1, Hanselman이 XML이 아닌 "앵글 괄호로 구분 된"데이터라고 부릅니다. BTW가 커뮤니티 위키가 된 이유는 무엇입니까? – MarkJ