Kodowanie znaków - WebClient WP7

0

Witam, nie mogę poradzić sobie z poprawnym wyświetleniem polskich znaków.

Plik XML, który pobieram na kodowanie ISO-8859-2.

<pre id="line1"><span class="pi"><?xml version="1.0" encoding="ISO-8859-2"?></span><span></span></pre>

Pobieram poprzez WebClient, czytałem o tym mnóstwo postów na StackOverflow, jednak nadal mi nic nie działa.

WebClient c = new WebClient();
c.Encoding = Encoding.GetEncoding("ISO-8859-2");
c.DownloadStringCompleted += c_DownloadStringCompleted;

Rzuca wyjątkiem:
An exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll but was not handled in user code

  1. Nie ustawiam kodowania dla WebClienta, tylko ściągam tak jak jest, próbując później tworzyć tablicę byte[]
string xml = e.Result;

Encoding iso = Encoding.GetEncoding("ISO-8859-2");
Encoding utf = Encoding.UTF8;

byte[] isoBytes = iso.GetBytes(xml);
byte[] utfBytes = Encoding.Convert(iso, utf, isoBytes);

W ostatniej linii ten sam wyjątek, co poprzednio.

  1. Próbowałem też podobnych, które znalazłem na StackOverflow, ale za każdym razem ten sam błąd. Próbowałem też StreamReader'a z ustawionym kodowaniem, ale bezskutecznie.

Czytałem, żeby użyć Encoding.Default, ale chyba nie jest to dostępne na WP7.

Nawet taki kod (gdzie nie ma nic dalej) rzuca błędem:

string xml = e.Result;            
Encoding utf = Encoding.UTF8;
Encoding iso = Encoding.GetEncoding("ISO-8859-2");

Nadal nie uporałem się z problemem. Będę wdzięczny za pomoc w rozwiązaniu problemu.

0

Kolego a na czym odpalasz apke?
Emulator?

Zobacz czy masz polską wersję ustawioną w emulatorze ( trzeba zmieniać przy każdym starcie)

WebClient wc = new WebClient();

                wc.DownloadStringAsync(new Uri " adres ");

Debug.Writeline(wc);

Poszukaj zakładki Output i zobacz co Ci wypluje

a żeby dane pobrać z XML musisz poczytać o parserach (bo na to mi wygląda co chcesz zrobić)

0
c.Encoding = Encoding.GetEncoding("ISO-8859-2");

a sprawdzałeś, czy to nie zwraca null?

0

Wersja językowa w emulatorze jest okej. Wyczytałem, że aplikacje SilverLight nie obsługują tego kodowania, był podany link do generatora, z którego otrzymałem kod:

http://4programmers.net/Pastebin/2487

Jednak nie mam pojęcia jak tego użyć.

Encoding iso = Encoding.GetEncoding("iso-8859-2");

Nadal rzuca błędem. Pewnie w ogóle nie korzystam z tej klasy...

0

W ogóle nie korzystasz z tej klasy.

Prawdopodobnie coś w stylu:

System.Text.Encoding x = new Hardcodet.Silverlight.Util.Latin2();
x.GetBytes(...);
0

Nadal rzuca błędem. Pewnie w ogóle nie korzystam z tej klasy...
A sama miałaby się użyć?
Przecież widać wyraźnie:

public class Latin2 : Encoding
0

Nie no, jakieś próby użycia były, z tym, że ja chyba źle temat od podstaw rozumiem. Mam taki kod

WebClient c = new WebClient();

c.DownloadStringCompleted += c_DownloadStringCompleted;
c.DownloadStringAsync(new Uri(URI, UriKind.Absolute), onCurrenyGot);
string xml = e.Result;            

Encoding utf = Encoding.UTF8;
Encoding iso = new Hardcodet.Silverlight.Util.Latin2();

byte[] isoBytes = iso.GetBytes(xml);
byte[] utfBytes = Encoding.Convert(iso, utf, isoBytes);

xml = Encoding.UTF8.GetString(utfBytes, 0, utfBytes.Length);

Czy to ma prawo zadziałać? Krzaczki pozamieniały się na znaki zapytania i nic więcej.

Już chyba wiem w czym rzecz, ale nadal nie potrafię naprawić. Ja chyba muszę już przy pobieraniu określić kodowanie, bo później zamieniany jest krzaczek, a nie polska litera. Jak zmienną edytuję w czasie działania programu (string xml), to polskie znaki działają.

0

To zrób inaczej - przed zrobieniem DownloadStringAsync() ustaw c.Encoding = new Hardcodet.Silverlight.Util.Latin2();.

1 użytkowników online, w tym zalogowanych: 0, gości: 1