.[ ČeskéHry.cz ].
Čestina v c++/Allegro

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
aliasals



Založen: 20. 05. 2011
Příspěvky: 9
Bydliště: Ostrava

PříspěvekZaslal: 12. květen 2018, 11:12:43    Předmět: Čestina v c++/Allegro Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 738
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 12. květen 2018, 12:08:54    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
aliasals



Založen: 20. 05. 2011
Příspěvky: 9
Bydliště: Ostrava

PříspěvekZaslal: 12. květen 2018, 14:14:05    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 860

PříspěvekZaslal: 12. květen 2018, 19:32:19    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1382
Bydliště: Telč

PříspěvekZaslal: 14. květen 2018, 07:55:30    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 860

PříspěvekZaslal: 14. květen 2018, 09:46:06    Předmět: Odpovědět s citátem

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 Smile. 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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna