Kodowanie polskich znaków

Odpowiedz Nowy wątek
2011-07-10 16:58
adad
0

Witam, mam najzwyklejszy plik .txt a w nim ciąg znaków typu: ąężźćóóóóółłłł, jak mogę poprwanie wyświetlić to w konsoli oraz jak mogę zamienić to na UTF32 w formie tablicy intów? Ponieważ funckja w bibliotece graficznej przyjmuje właśnie taką tablicę aby wyświetlić coś co jest w Unicodzie.

Jakakolwiek pomoc będzie przydatna

Na razie próbowałem to zapisać w Notatniku z kodowaniem Unicode i odczytać za pomocą funkcji z przedrostkiem w czyli np wstring ale to nic nie daje

Pozostało 580 znaków

2011-07-10 21:16
0

W ten sposób nie zadziała tym bardziej jak będziesz chciał odwoływać się do pojedynczych znaków. Jest jakaś biblioteka dla c++ specjalnie przeznaczona do tego celu ale nie pamiętam jej nazwy. Poszukaj w google.
Uważam, że niegłupim rozw. jest również samemu napisanie funkcji tłumaczącej (przydadzą się operatory bitowe &, <<, | ).
przydatny opis: http://en.wikipedia.org/wiki/UTF-8#Description
tu nawet ktoś napisał coś takiego ale nie trzeba pisać aż tyle: http://www.cplusplus.com/forum/general/31270/
Do przechowania znaku używaj wchar_t, do łańcucha wstring czyli tak jak robiłeś, do wypisania tekstu wcout.
edit:
na pewno nie jest to jedyne rozw. ale napisałem sposób jaki dla mnie działa niezawodnie
edt2:
jeśli plik byłby zapisany w cp1250 (czasem nazywane ansi), to inna przydatna rzecz:
http://unicode.org/Public/MAP[...]ORS/MICSFT/WINDOWS/CP1250.TXT

edytowany 2x, ostatnio: yet_another_bug, 2011-07-10 21:44

Pozostało 580 znaków

2011-07-10 22:32
dadad
0

Dzięki, skorzystam na pewno z pierwszego linku. Więc wystarczy że zapisze plik jako UTF8, odczytuje linijki do stringa i potem używam funkcji FromUTF8?

Pozostało 580 znaków

2011-07-10 22:46
0

Jeśli chodzi o tę funkcję, to nie musi być akurat string (string.c_str()), może być to np tablica char jeśli plik byłby duży. Funkcja nie musi też zwracać akurat wstring a np tablicę typu wchar_t i też powinno być ok.

Pozostało 580 znaków

2011-07-10 22:52
adadad
0
std::string tempor1;
    std::wstring tempor;
     std::ifstream plik("test.txt");
     if (!plik) std::cout << "Nie udalo sie otworzyc pliku z zablokowanymi uzytkownikami" << std::endl;
    else
        std::getline(plik,tempor1);
    plik.close();
    tempor = FromUTF8(tempor1.c_str());
    std::wcout << tempor << std::endl;

I nic się nie wyświetla, plik jest zapisany jako UTF8.

Pozostało 580 znaków

2011-07-10 23:08
0

Trudno powiedzieć co jest nie tak, należałoby odpalić debuger i prześledzić co tam się dzieje.
Dodam tylko, że jeśli masz jakiś większy plik lepiej jest wczytać go do tablicy i na niej operować. Działa to dużo szybciej. Tu przykład:
http://www.cplusplus.com/reference/iostream/istream/read/

Pozostało 580 znaków

2011-07-10 23:09
dad
0

Nie no, na razie to nie będą duże pliki ponieważ chcę na razie spróbować to w ogóle zastosować i wyświetlić.

Pozostało 580 znaków

2011-07-10 23:16
adad
0

Przeleciałem debuggerem, wszystko robi się pięknie, pięknie aż tu nagle przy ostatnim obrocie pętli jakoś magicznie cały utworzony string który ma być zwrócony nagle jest czyszczony

Pozostało 580 znaków

2011-07-10 23:20
adad
0

Szkoda, że nie mogę w żaden sposób edytować posta więc proszę moderatora o sklejenie moich wypowiedzi. String jednak jest tworzony ponieważ jego długość jest poprawna natomiast nie mogę go wyświetlić w konsoli i nie wiem dlaczego.

Pozostało 580 znaków

2011-07-10 23:34
0

Czyli łańcuch powstaje, widać w podglądzie polskie znaki diakrytyczne itd.
A jak napiszesz np:

std::wcout << L"ąęć" << std::endl;

to wyświetla się coś?

Pozostało 580 znaków

2011-07-10 23:57
adad
0

Nie, nie wyświetla się nic.

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