2011-06-13 8 views
4

iso-8859-1 인코딩을 사용하는 rss 피드를 읽으려고합니다.iso-8859-1 rss 피드 읽기 C# WP7

모든 요소를 ​​잘 처리 할 수 ​​있지만 문제는 텍스트 블록에 넣을 때 모든 문자가 표시되지 않는다는 것입니다. 내가 뭘 잘못하고 있는지 모르겠다. 나는 구글에서 찾은 몇 가지 해결책을 시도했지만 이것은 나를 위해 작동하지 않았다. 내가 뭔가를 놓치고 있어야합니다 .. 그것은 내가 utf - 16 이외의 다른 것들과 실제로 일하는 것은 처음입니다. 나는 결코 전에 무엇이든을 개조해야했다.

응용 프로그램은 다음과 같이 작동합니다. downloadstring async (WebClient). 그래서 그것이 호출 될 때 나는 완전한 RSS 피드를 포함하는 문자열을 얻습니다.

나는 encoding.convert 바이트를 얻으려고 노력했다. 그러나 나는 뭔가를 놓치고 있어야한다. 이처럼

는 제목 중 하나를 잘 표시되지 않는 문자가 포함되어 있지만 나는이 aswell에게

private void RSS_ORC(object sender, OpenReadCompletedEventArgs args) 
    { 
     Encoding e = Encoding.GetEncoding("ISO-8859-1"); 

     Stream ez = args.Result; 

     StreamReader rdr = new StreamReader(ez, e); 
     XElement _xml = _xml = XElement.Parse(rdr.ReadToEnd()); 
     feedlist = new List<Code.NewsItem>(); 

     XNamespace dc = "http://purl.org/dc/elements/1.1/"; 
     foreach (XElement item in _xml.Elements("channel").Elements("item")) 
     { 

      Code.NewsItem feeditem = new Code.NewsItem(); 
      feeditem.title = item.Element("title").Value; 
      feeditem.description = item.Element("description").Value; 
      feeditem.pubdate = item.Element("pubDate").Value; 
      feeditem.author = item.Element(dc + "creator").Value; 

      feedlist.Add(feeditem); 
     } 
     listBox1.ItemsSource = feedlist; 
    } 

을 시도했습니다 샘플

 WebClient RSS = new WebClient(); 
     RSS.Encoding = Encoding.GetEncoding("ISO-8859-1"); 
     RSS.DownloadStringCompleted += new   DownloadStringCompletedEventHandler(RSS_DSC); 
     RSS.DownloadStringAsync(new Uri("some rss feed")); 


public void RSS_DSC(object sender, DownloadStringCompletedEventArgs args) 
    { 

     _xml = XElement.Parse(args.Result); 
     foreach(XElement item in _xml.Elements("channel").Elements("item")) 
       { 
        feeditem.title = item.Element("title").Value; 
         // + all other items 

       } 
    } 

입니다. 마찬가지로 .. 부분적으로 작동하도록 인코딩을 얻을 수 있습니다. 이러한 문자가있는 대신 : 물음표, 물음표 또는 스퀘어 스퀘어가있는 사각형.

나를 잘못 이해하지 마라. 나는 이것에 관해 총 초심자 다. 그러나 웹에 게시 된 솔루션으로는 해결할 수 없습니다.

작동하지 않아서 인코딩 부분을 제거했음을 참고하십시오./ 누군가 나를 도와 줄 수 있다면 정말 좋을 것입니다.

답변

3

당신은이 client.DownloadStringAsync를 호출하기 전에 인코딩 를 설정하여 인코딩을 지정할 수 있습니다

webClient.Encoding = Encoding.GetEncoding("iso-8859-1") 

을 코드 샘플에서 아무 곳이나 XML의 문서를 작성하지 않습니다. 일부 코드가 누락 되었습니까? ,

var xml = XDocument.Load((string)args.Result); 
+0

죄송합니다. 일부 코드를 삭제했습니다. 인코딩을 지정합니다. 그리고 XML을 위해 나는 이것을 좋아한다. XElement _xml; _xml = XElement.Parse (args.Result); – helpme

+0

1. 전체 코드로 질문을 업데이트하십시오. 2. 반환 된 문자열이 iso8559-1인지 확인 하시겠습니까? – jgauffin

+0

RSS 소스에 지정되었습니다. 그래서 나는 그렇게 생각 하느냐? – helpme

1

윈도우 폰 7과 실버 라이트는 ISO-8859-1과 같은 다른 인코딩을 지원하지 않습니다 그들은 단지 ASCII 및 유니 코드 인코더를 지원 : 당신은 같은 뭔가를 초기화해야한다. 다른 무엇을 위해서는 OpenReadAsync을 사용하여 바이트 스트림을 얻은 다음 자신의 인코딩 구현을 적용해야합니다.

blog은 작성시 유용 할 수 있습니다.

+0

나는 그것이 MSDN의 기사를 통해 나왔다고 맹세했다. 적어도 그것은 wp7 로고를 실었습니다. 그러나 나는 더 이상 그것을 찾을 수 없기 때문에 당신의 충고를 따라 그 블로그를 읽을 것입니다. 나는 그것이 밖으로 일하는 경우 알려 드리겠습니다! – helpme

+0

@helpme : @ jgauffin의 답변에 대한 최근 코멘트를 참조하십시오. – AnthonyWJones

0

ISO-8859-1은 WP7에서 가장 확실히 지원됩니다. ISO-8859- * 인코딩 중 유일합니다. XmlReader를 사용하여 RSS 스트림을 비 직렬화하고 UTF- * 및 ISO-8859-1이 해당 클래스에서 지원되는 유일한 인코딩입니다 (Windows- * 및 ISO-8859-2 이상에서는 XmlReader c'tor에서 예외가 발생 함).

는 (인코딩을 지정하지 않고)이 같은 XmlReader를 사용해보십시오 :

using (XmlReader reader = XmlReader.Create(stream)) 
{ 
    ... 
} 

XmlReader를 스트림에 XML 선언에서 인코딩을 얻을 것이다.

문자의 위쪽 절반 (0x80 이상)을 표시하는 데 여전히 문제가있을 수 있습니다.나는 피드 나 (내 WP7 응용 프로그램)에서이 문제를 가지고와 사용 일을 해결하기 위해이 작은 해킹 : 그것은 단지 물론 웹 브라우저 컨트롤에서 작동

public static string EncodeHtml(string text) 
    { 
     if (text == null) return string.Empty; 

     StringBuilder decodedText = new StringBuilder(); 
     foreach (char value in text) 
     { 
      int i = (int)value; 
      if (i > 127) 
      { 
       decodedText.Append(string.Format("&#{0};", i)); 
      } 
      else 
      { 
       decodedText.Append(value); 
      } 
     } 
     return decodedText.ToString(); 
    } 

을,하지만 그건 내가 이제까지을 본 유일한 장소입니다 잘못된 표시. 은 RSS XML을 디코딩 할 필요하면이 도움이

희망, 캘럼

0

이 나를 위해 일했다. 이 .NET

 WebClient wcRSSFeeds = new WebClient(); 
     String rssContent; 

     // Support for international chars 
     Encoding encoding = wcRSSFeeds.Encoding; 
     if (encoding != null) 
     { 
      encoding = Encoding.GetEncoding(encoding.BodyName); 
     } 
     else 
     { 
      encoding = Encoding.UTF8; // set to standard if none given 
     } 
     Stream stRSSFeeds = wcRSSFeeds.OpenRead(feedURL); // feedURL is a string eg, "http://blah.com" 

     using (StreamReader srRSSFeeds = new StreamReader(stRSSFeeds, encoding, false)) 
     { 
      rssContent = srRSSFeeds.ReadToEnd(); 
     } 
2

도움이된다면 지원하는 모든 암호화 유형을 지원하는 충분한 있도록 제네릭, 당신은 사용할 수 있습니다

var myString = HttpUtility.HtmlDecode(feeditem.description); 

모든 특수 문자가 해독 될 것입니다이 방법을 수행 할 수 있습니다 다음, 디스플레이 myString 올바르게