Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.1] polskie znaki w sf::String

Ostatnio zmodyfikowano 2014-01-01 18:49
Autor Wiadomość
DejaVu
» 2013-12-31 17:56:17
Otwierając notatnikiem settings.ini widzisz poprawne polskie znaki?
P-100774
Piotr020798
Temat założony przez niniejszego użytkownika
» 2013-12-31 18:03:13
Tak.
P-100775
DejaVu
» 2013-12-31 18:10:59
czyli:
C/C++
std::string tekst;
sf::String bla( tekst.c_str() );
działa źle, a:
C/C++
std::string tekst;
sf::String bla( L"ąćęłóńźż" );
działa dobrze? Dzisiaj albo jutro zweryfikuję czy tak faktycznie jest i Ci dam możliwości rozwązania problemu.
P-100776
Piotr020798
Temat założony przez niniejszego użytkownika
» 2013-12-31 18:13:44
Tak, musi być z L przed stringiem.
P-100777
DejaVu
» 2013-12-31 20:16:09
http://en.sfml-dev.org/forums​/index.php?topic=10866.0

C/C++
std::locale::global( std::locale( "" ) );
Nie przynosi oczekiwanego rezultatu.

C/C++
std::locale::global( std::locale( "Polish" ) );
Nie przynosi oczekiwanego rezultatu.



Wniosek: najlepiej zapełniać sf::String tekstem unikodowym. Jeżeli wczytujesz tekst do std::string, to konwertuj do std::wstring przy pomocy funkcji MiltiByteToWideChar (rozwiązanie tylko dla Windowsa).

http://cpp0x.pl/forum/temat/​?id=11257

Być może dałoby radę coś wydusić jeszcze z SFML-a, ale to musiałbyś pooglądać jego źródła tj. w jaki sposób dokonuje on konwersji kodowania. Popatrz też w dokumentacji SFML-a na klasę sf::String oraz na konstruktory, jakie są dostępne.
P-100792
Elaine
» 2013-12-31 22:01:23
W SFMLu jest funkcja do konwersji UTF-8 na UTF-32: sf::Utf8::toUtf32. Mając tekst w UTF-32 można stworzyć sf::String nie przejmując się ustawieniami lokalnymi.
P-100804
Wasilek
» 2013-12-31 23:20:16
Miałem podobny problem http://cpp0x.pl/forum/temat/​?id=12140&p=2 Niestety nie znalazłem innego rozwiązania niż podane w tamtym temacie :)
P-100809
Piotr020798
Temat założony przez niniejszego użytkownika
» 2014-01-01 18:49:53
Problem rozwiązany. Dziękuje wszystkim za pomoc.

Rozwiązanie:
C/C++
sf::String nick; // To potem będziemy wyświetlać
std::string wartosc; // Wartość odczytana z pliku

std::basic_string < sf::Uint32 > tmp;
sf::Utf8::toUtf32( wartosc.begin(), wartosc.end(), std::back_inserter( tmp ) );
nick = tmp;

A kodowanie pliku to UTF-8 (Bez BOM)
P-100872
1 « 2 »
Poprzednia strona Strona 2 z 2