Problem z kodowaniem w C#

Odpowiedz Nowy wątek
2012-06-08 17:23
0

za pomogą funkcji "IndexOf" ściągam treść ze strony www. Wszystko kodowało mi się jak po maśle, dopóki nie skompilowałam. Po testowaniu programu okazało się, że wszystko działa jak należy ale pobrana treść nie wyświetla znaków polskich. Treść wygląda mniej więcej w ten sposób:

podstawową zasadą trenowania Należy pamiętać, cierpliwości i nie

Pytanie dlaczego i jak temu zaradzić? Próbowałam zmienić język domyślny na PL ale nic z tego...

Pozostało 580 znaków

2012-06-08 17:27
0

w czym to wyświetlasz/do jakiej zmiennej zapisujesz znaki

edytowany 1x, ostatnio: Sopelek, 2012-06-08 17:27

Pozostało 580 znaków

2012-06-08 17:31
0

do zmiennej string, bo to co pobieram jest tekstem, a wyświetlać próbowałam chyba juz we wszystkim teksboksie, lablu, richbox itd.
I nawet zrobiłam test, pobrałam treśc ze strony i zapisałam go do pliku txt za pomocą funkcji FileStream, i jak sie okazuje w notatniku tez wyrodziły sie krzaczki

edytowany 2x, ostatnio: marta1995, 2012-06-08 17:33

Pozostało 580 znaków

2012-06-08 17:40
0

Bo string to łańcuch charów. A char nie przyjmie większej wartości niż 255. Polskie znaki diakrytyczne mają wartości powyżej, więc niektóre bity są ucinane (względem wielkości char. tzn część jest "przenoszona" do następnego elementu stringa.)
Spróbuj użyć wstring.

edytowany 3x, ostatnio: Sopelek, 2012-06-08 17:41

Pozostało 580 znaków

2012-06-08 17:51
0

w C# nie ma chyba takiego czegoś jak wstring

no i posiało wszystkich facetów na mecz! nie ma kto mi pomoc;p - marta1995 2012-06-08 18:26

Pozostało 580 znaków

2012-06-08 18:52
msm
0

no i posiało wszystkich facetów na mecz! nie ma kto mi pomoc;p

Mecz? W życiu.
Edit: O, nie tylko ja: Oglądasz mecze UEFA Euro 2012?

Ale zanim pomożemy, podaj kod który masz (w szczególności to pobieranie ze strony www).
Masz gdzieś błąd z kodowaniem znaków, ale gdzie dokładnie to nie zgadniemy bez kodu albo szklanej kuli :>.

edytowany 1x, ostatnio: msm, 2012-06-08 18:54

Pozostało 580 znaków

2012-06-08 19:08
0

Stringi w C# kodowane są w UTF-16, aby przekonwertować do UTF-8 spróbuj zrobić coś takiego:

string twojString;
UTF8Encoding utf8 = new UTF8Encoding();
byte[] encodedBytes = utf8.GetBytes(twojString);
twojString= encodedBytes.ToString();

Albo użyj metody Encoding.Convert().

Pozostało 580 znaków

2012-06-08 19:10
msm
0

@up - ale ona wczytuje stringi (o dziwnym kodowaniu) ze strony, a nie zapisuje je na stronę...

Pozostało 580 znaków

2012-06-08 19:16
0

Kod jest na pewno dobrze bo sciaga mi tekst prawidłowo

 try
            {
                WebClient Pobierz = new WebClient();
                string zrodlo = Pobierz.DownloadString("joomla.pl");

                int start = zrodlo.IndexOf("<title>", 0, zrodlo.Length);
                int koniec = zrodlo.IndexOf("</title>", 0, zrodlo.Length);
                string tytuł = zrodlo.Substring(start + 7, koniec - start - 7);
                groupBox1.Text = tytuł;

                int PozycjaArt = zrodlo.IndexOf("</title>", 0);
                string surowy = zrodlo.Substring(PozycjaArt + 22, 500);
                string Art = surowy.Trim();

                label1.Text = Art + "...Kliknij, aby czytać dalej";

            }
            catch
            {
                MessageBox.Show("Nawiązanie połączenia z internetem było nie możliwe");
                Close();
            }
a skoro jestesmy już przy IndexOf, to może wiecie co zrobić aby IndexOf wyszukało mi drugi znacznik <title> a nie zaczynał od pierwszego? Po porstu chce zgarnać drugi tytuł ze strony - marta1995 2012-06-08 19:33
Jak to drugi? Na stronie umieszcza się jeden element title. - somekind 2012-06-08 20:05
nie koniecznie, w kanalach RSS jest dużo znaczników title, ale już nie czepiam sie tego title, załóżmy ze na stronie są dwa nagłówki typu h2 i nie chce pobrać tego pierwszego, ale nastepny - marta1995 2012-06-08 20:10
Napisałem w poście. - somekind 2012-06-08 20:15
czytam wlasnie ;p - marta1995 2012-06-08 20:16

Pozostało 580 znaków

2012-06-08 19:33
0

No musisz rozpoznać kodowanie tego stringa którego pobierasz (http://stackoverflow.com/ques[...]a-strings-encoding-in-c-sharp), później jak już go pobierzesz musisz go przekonwertować do UTF-8 za pomocą metody Encoding.Convert() o której wcześniej pisałem http://msdn.microsoft.com/en-[...]em.text.encoding.convert.aspx

edytowany 1x, ostatnio: maze, 2012-06-08 19:35

Pozostało 580 znaków

2012-06-08 19:36
msm
1

Tak, kod jest na pewno poprawny a błąd to wina chochlików zamieniających bity w karcie sieciowej.

Pobierz.Encoding = Encoding.UTF8;

Przed pobieraniem.

@maze - wyprzedziłeś mnie :>

edytowany 1x, ostatnio: msm, 2012-06-08 19:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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