Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
aliasals
Založen: 20. 05. 2011 Příspěvky: 10 Bydliště: Ostrava
|
Zaslal: 12. květen 2018, 11:12:43 Předmět: Čestina v c++/Allegro |
|
|
Neřešil náhodou z vás někdo, jak zobrazit české znaky v C++/Allegru? Nejlépe celý řetězec ze souboru
Zatím jsem přišel zobrazení znaku přes Unicode čislo :
int textt = 0x0160; // 'š'
uint16_t const *text = &textt;
ALLEGRO_USTR * ustr = al_ustr_new_from_utf16(text);
al_draw_ustr(font, color, x, y, flags, ustr);
al_ustr_free(ustr);
Ale tohle "řešení" se mi zdá dost neštastné. Rád bych se vyhnul i situaci, kdy bych pro každy Znak zjišťoval Unicode čislo přes fci MultiByteToWideChar()
díky |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 12. květen 2018, 12:08:54 Předmět: |
|
|
Podle dokumentace al_draw_ustr čeká řetězec v utf-8. Tak stačí, pokud v tom souboru (a ve zdrojácích) budeš mít všechny texty v tomhle kódování - a to už pak je jen otázka nastavení textového editoru... _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
aliasals
Založen: 20. 05. 2011 Příspěvky: 10 Bydliště: Ostrava
|
Zaslal: 12. květen 2018, 14:14:05 Předmět: |
|
|
No priznam se, ze se mi to zrovna nepovedlo.
Nejdal kam jsem se dostal bylo :
const char *utf8 = u8"text\u0160"; //"textš"
ALLEGRO_USTR * ustr = al_ustr_new(utf8);
al_draw_ustr(font, color, x, y, flags, ustr);
al_ustr_free(ustr);
jak muzu ulozit znaky ze souboru do char s kodovanim utf-8? |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 12. květen 2018, 19:32:19 Předmět: |
|
|
char pole jako takové nic o UTF-8 neví. Je to prostě jen pole 8-bitových čísel. Pokud máš UTF-8, tak jeden znak je tvořen až 32bity. Tzn. třeba vezmeš 4 chary a máš jeden UTF8 znak.
V char poli můžeš mít uložený UTF-8 řetězec, ale nejsi schopný s ním pracovat jako s řetězcem přímo. Tzn. nelze zjistit jeho délku, udělat snadno substring apod. Ale to pro tvé potřeby není podstatné, ty to jen pošleš dál do Allegra a tam se to s tím nějak popere.
Když načteš soubor z disku, který je v UTF-8 tak se ti načte do char pole, ale počet prvků pole se nemusí rovnat počtu znaků, které čekáš. Jedině UTF-8 a ASCII znaky jsou stejné (tzn. 0-9, A-Z, a-z, nějaké čárky, znaménka) -> zabírají v UTF-8 i ASCII 1 byte. Diakritika a jiné znakové sady už ne. _________________ Perry.cz |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 14. květen 2018, 07:55:30 Předmět: |
|
|
Jak píšou ostatní, v textovým editoru a ve zdrojácích použít UTF-8 (někde musíš nastavit). A pak doporučuju stáhnout tady https://www.cprogramming.com/tutorial/unicode.html utf8.h a utf8.c. Jsou tam nějaký funkce na konverzi, zjištění délky stringu v utf8 a tak podobně (po lehkých úpravách jsem použil i ve vlastních projektech). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 14. květen 2018, 09:46:06 Předmět: |
|
|
Ještě pokud chceš něco, co má podobný "interface" jako std::string, tak je tu https://sourceforge.net/projects/tiny-utf8/. Nicméně co jsem jí používal, tak občas tam je bug . Resp. to bylo v minulé verzi, teď ta poslední nevím jak na tom je.
Hard-core možnost je pak ICU knihovna. _________________ Perry.cz |
|
Návrat nahoru |
|
 |
aliasals
Založen: 20. 05. 2011 Příspěvky: 10 Bydliště: Ostrava
|
Zaslal: 22. leden 2021, 19:33:30 Předmět: Řešení po 3 letech |
|
|
Dekuji za pomoc, konecne jsem na to prisel. (Po 3 letech )
Napisu tu reseni, tak snad to nekomu pomuze...
1) Musi se pouzivat spravny unicode font :
-Nektere fonty jsou na urcity jazyk a nektere maji celej set unicode znaku...
2) Allegro pouziva spesl retezec ALLEGRO_USTR *ustrText;
-Kdyz se pouziva normalni string nebo char *retezec;, tak se pocita s tim, ze kazdy char v poli je jeden znak...,
-ale ALLEGRO_USTR pocita s tim, ze 4 char znaky (4x BYTE) za sebou jsou dohromady jeden znak (neboli to je uint16_t);
3)psat unicode-text do zdrojoveho souboru je mozne, ale musi se nastavit format souboru a neni to moc "elegantni reseni"
-lepsi je nacist unicode text primo z *.txt...
Nejakej ten prakticky kod :
ALLEGRO_FILE *aFile = al_fopen("assets/font/unicodeTest.txt", "r");
ALLEGRO_USTR *ustrText = new ALLEGRO_USTR;
ustrText = al_fget_ustr(aFile); //cte po radcich
al_draw_ustr(font, color, x, y, 0, ustrText);
Dekuji za pomoc lidi
PS : Ve fontech a v textech se uplne moc nevyznam (z technickeho hlediska), tak kdybych napsal nejakou blbost, tak prosim o opravu... |
|
Návrat nahoru |
|
 |
|