Autor Wątek: [C++] SDL_TTF & Polskie Znaki  (Przeczytany 1280 razy)

Offline vipeout

  • Użytkownik

# Luty 04, 2011, 12:41:21
Na wstępie napiszę: Wiem, że to już było wałkowane n razy. Przeczytałem wszystkie 3 tematy jakie tutaj znalazłem, i o ile wydawałoby się, że problem powinien być rozwiązany to nie jest. Tematy o jakich mówię:

http://forum.warsztat.gd/index.php/topic,7635.msg102648.html#msg102648
http://forum.warsztat.gd/index.php/topic,3879.msg53075.html#msg53075
http://forum.warsztat.gd/index.php/topic,4726.msg65607.html#msg65607

Problem w tym, że zmieniając w opcjach kompilatora ( a w sumie to raczej projektu) Project -> Properties -> Configuration Properties -> Character Set (multi-byte lub unicode) nic nie daje. Otrzymałem poradę, aby sprawdzić czy plik zakodowany w UTF-8 się wczyta i wyświetli poprawnie. Otóż tak wyświetla się poprawnie.

Jednak gdy mam zmienną typu string, do której dodaje znaki wpisywane na klawiaturze po to, aby je wyświetlić to przy zrobieniu czegoś takiego:

string zmienna;
zmienna += 'ą';

Do stringa wpisuje się prawidłowo 'ą'. (sprawdzanie shiftów i altów pominąłem). Jednak
Message = TTF_RenderUTF8_Blended( font,zmienna.c_str(), fontcolor );
SDL_BlitSurface( Message, 0, dest, &temp_rect );
SDL_FreeSurface( Message );

Daje w wyniku jakieś dziwne znaczki. Czcionka ma polskie znaki, na podglądzie pisze "Zażółć gęślą jaźń". Nie mam pojęcia gdzie coś źle ustawiłem / czemu nie działa. Z góry dziękuję za pomoc.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Rolek

  • Użytkownik

# Luty 04, 2011, 13:46:30
string zmienna;
zmienna += 'ą';

To 'ą' nie jest zakodowane UTF-8 tylko w jakimś kodowaniu jednobajtowym(na Windowsie CP-1250).
Spróbuj zmienna += "\xC4\x85"

Offline Xirdus

  • Redaktor

# Luty 04, 2011, 16:31:07
Zamiast stringów używaj wstringów.

Offline vipeout

  • Użytkownik

# Luty 06, 2011, 18:15:53
Zamiast stringów używaj wstringów.

Wiem, że to się tak da zrobić, ale zmienianie całego kodu jest dość problematyczne. Zwłaszcza, że zwykły string może przechowywać znak 'ą' i go wyświetlać - zawartość testowego pliku wczytywałem do stringa i wyświetlałem tą samą funkcją co zmienną czytaną z klawiatury.

string zmienna;
zmienna += 'ą';

To 'ą' nie jest zakodowane UTF-8 tylko w jakimś kodowaniu jednobajtowym(na Windowsie CP-1250).
Spróbuj zmienna += "\xC4\x85"

Zadziałało, pojawia się jednak coś dziwnego: dla 1 znaku (w tym przypadku małe ą) działa i wyświetla się dobrze, ale jak dopisuje następny (w sumie już zakodowany domyślnie, bo nie-polskie znaki działały) pojawiają się jakieś krzaczki. Nawet jak wpiszę te 'ą' drugi raz to pierwsze zmienia sięna duże, 2 małe się pojawia a za nim jakieś prostokąty.
1. Czy zamiana wszystkich dodawanych znaków na tego typu zakodowane pomoże?
2. Gdzie mogę znaleźć kodowania pozostałych znaków(albo jak się to kodowanie nazywa to wygooglam)?
3. Czy jest jeszcze coś co powinienem wiedzieć jeśli chcę tego używać?

Dziękuję za pomoc. Odpowiadam tak późno bo nie miałem okazji dostać się do kompa wcześniej.