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

[Allegro, C++] Wyświetlanie polskich znaków poprzez rzutowanie z formatu unicode

Ostatnio zmodyfikowano 2012-03-14 10:00
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
[Allegro, C++] Wyświetlanie polskich znaków poprzez rzutowanie z formatu unicode
» 2012-03-13 20:04:33
Witam. W swoim programie napisanym w allegro, wyświetlam w czcionce Times New Roman jakiś tam tekst. Poprawnie wyświetlają się polskie znaki (dla przyszłych czytających ten temat, dodam że zrobione zostało to tak jak opisane jest w tym temacie : [Allegro] Problem z polskimi znakami przy zmienionej czcionce). Więc jak dam po prostu :

textprintf_ex( bufor, font, 50, 50, makecol( 0, 100, 243 ), - 1, "Grzegżółką" );


to wszystko ładnie widać. Ale gdy wczytuję tekst, to wczytuję go za pomocą :

C/C++
int znak;

if( keypressed() )
{
    int scancode;
    znak = ureadkey( & scancode );
    clear_keybuf();
}

Gdy potem wyświetlam :

textprintf_ex( bufor, font, 50, 50, makecol( 0, 100, 243 ), - 1, "Znak : %c, wartość : %d",( char ) znak, znak );

to dobrze widać co się wczytuje, dopóki nie wczytuję polskich znaków. Gdy wczytuję polskie znaki, to widzę albo "^" albo "[", "{" i temu podobne. Sęk w tym, że dana litera ma dobrą wartość, odwołując się do informacji z tej strony : Ogonki w Unikodzie. Dla przykładu jak wcisnę "ś", to widzę wartość : 347, czyli prawidłową. Mimo to, zamiast literki "ś", wyświetla się znak "[". Próbowałem już to obejść przez różne rzutowania, ale nie potrafię zamienić tej prawidłowej wartości w formacie unicode na polski znak (a zastosowana czcionka oczywiście obsługuje polskie znaki). Dodam, że na początku korzystałem z : » Allegro 4.4readkey, ale ze względu, że unicode ma polskie znaki, przeszedłem na ureadkey. Wczoraj długo to męczyłem, szukałem różnych informacji, ale nie znalazłem nic co by mi pomogło. Dla ewentualnych przyszłych czytających ten temat, dam jeden link, w którym autor ma podobny problem, i podano mu rozwiązanie które pomogło, może ktoś kto będzie czytał ten temat też znajdzie w tym pomoc. Link : http://www.allegro.cc/forums/thread/335857, tamto rozwiązanie :

I used was adding set_uformat(U_ASCII); to the program before allegro_init();.

Jednak u mnie to nie pomogło. Czuję, że rozwiązanie może być banalne, a ja robię po prostu jakiś głupi błąd, a potem będę siebie przeklinał, że na to nie wpadłem. Jednak na chwilę obecną skończyły mi się pomysły. Any idea ?
P-52559
malan
» 2012-03-14 00:35:44
C/C++
char c = 'ś';
textprintf_ex( bufor, font, 50, 50, makecol( 0, 100, 243 ), - 1, "Znak : %c, wartość : %d", c,( int ) c );
Pokazuje:
Znak : ^, wartość : 347
?
P-52587
McAffey
Temat założony przez niniejszego użytkownika
» 2012-03-14 00:57:39
Próbowałem to już ugryźć w ten sposób. Niestety pokazuje niezrozumiałe dla mnie (ujemne) wartości. W tym przypadku zwraca -101 :

Znak : ^, wartość : -101


No i nie rozumiem dla czego w tym przypadku również wyświetla "^" zamiast "ś". Przecież znak został przypisany standardowo :

char c = 'ś';


Co ciekawe, ta sama operacja tylko z zastosowaniem string'a wyświetla już poprawny (polski) znak.
P-52588
malan
» 2012-03-14 01:03:08
Tzn.?
P-52589
DejaVu
» 2012-03-14 01:35:06
unsigned char => 0..255
signed char => -128 ... 127
char => random <= zależne od ustawień kompilatora - zazwyczaj domyślnie signed char.
P-52590
McAffey
Temat założony przez niniejszego użytkownika
» 2012-03-14 10:00:59
Tzn.?

Tzn gdy wyświetlam to w ten sposób :

C/C++
string c = 'ś';
textprintf_ex( bufor, font, 50, 50, makecol( 0, 100, 243 ), - 1, "Znak : %s", c.c_str() );

To wyświetla się litera "ś" poprawnie.

@DejaVu A masz jakiś pomysł, jak przekazać/skonwertować wartość unicode do chara/stringa aby został poprawnie odczytany jako znak. Bo mam zwrócony poprawny numer unicode litery, a nie potrafię go "zamienić na literę" (w przypadku polskich znaków).



Edit: Dzisiaj zajrzałem do innego projektu z allegro i w nim też postanowiłem odświeżyć czcionki. I wynikła z tego ta sama sytuacja, tylko że tam, tekst wczytuję nie poprzez ureadkey, tylko tam wczytuję go z pliku :

C/C++
string lista[ 100 ];

while( !bufor_plikowy.eof() )
{
    getline( bufor_plikowy, tekst_transfer );
    lista[ indeks ] = tekst_transfer;
    indeks++;
}
bufor_plikowy.close();

I tak samo wyświetlają się krzaczki zamiast polskich znaków, a pozostałe znaki widać poprawnie (czcionka oczywiście obsługuje polskie znaki, wystarczy wpisać :
string test = "gżegżółkąę";
 i polskie znaki się wyświetlają).
P-52594
« 1 »
  Strona 1 z 1