Witam, ostatnio robię takie projekty że ciągle na przeszkodzie idzie mi kodowanie polskich znaków... Teraz doszedłem jednak do bardzo ciekawej sytuacji (nie mam bladego pojęcia o co tu chodzi). Najpierw pierwszy prosty przykład:
wstring str; //rozszerzony string
getline(wcin, str); //wczytywanie linii (np wczytam łąka)
wcout << str << endl; //wyświetlanie odpowiednim obiektem jakim jest wcout (wyświetli mi się poprawnie łąka)
Program poprawnie wczytuje i wyświetla łańcuch (użyłem oczywiście typu rozszerzonego jakim jest std::wstring). Wszystko też działa gdy zamiast getline dam cin, analogicznie chyba podobnie w przypadku wczytania danych z pliku.
Ale teraz dochodzimy do czegoś to mnie przerasta:
wstring str = L"łąka"; //podobnie jak wcześnie ale tym razem od razu podałem tekst bez wczytywania
wcout << str << endl; //no i nic nie ma :X
Kiedy nie pobiorę tekstu z żadnego strumienia tylko go podam operatorem przypisania to polskie znaki mi się nie wyświetlają poprawnie albo nie wyświetla się nic. O co tu znowu chodzi?
I jeszcze jedno małe pytanko korzystając z okazji, słyszałem że polskie litery za zakodowanie na dwóch bajtach dlatego np do pliku można wstawić pierwszy i drugi człon takiego znaku, oto przykład:
ofstream plik("hello.txt");
//litera 'ą' to w hex 0xC485
int a = 0xC4; //pierwszy człon
int b = 0x85; //drugi człon
plik << char(a) << char(b); //dlaczego jest taki efekt że wypisze ą a nie np Ä… bo to oznaczają pojedyncze części w kodowaniu UTF-8 z którego korzysta notatnik.
plik.close();
Skąd taki wynik, skąd program wie kiedy dwa typy char stawione do strumienia zinterpretować jako jeden znak na dwóch bajtach a kiedy wyświetli je oddzielnie? Zauważyłem też że kiedy zrobię tak:
plik << char(a) << char(b);
to rezultat jest jeszcze inny ;(
Będę bardzo wdzięczny za pomoc i z góry bardzo dziękuje