Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: ANSI C - UTF8  (Přečteno 1583 krát)

shadius

  • Návštěvník
  • *
  • Příspěvků: 57
    • Zobrazit profil
ANSI C - UTF8
« kdy: 11 Listopadu 2010, 10:05:12 »
Dobrý den,
píšu v C v rámci semestrální práce jednoduchý validátor XML a řeším problém, jak detekovat výskyt znaku, který se neobjevuje v charsetu použitém v XML hlavičce - přičemž seznam možných charsetů omezme na cp1250 a utf-8. Principiálně mi přijde vhodné mít externí knihovnu - nechci si komplikovat život - a na každý zpracovaný znak se ptát jestli je v použitém charsetu. Bohužel, nejsem ani schopný např. akcentované znaky díky omezenosti ascii načíst a dělat to přes locate mi přijde jako blbost. Použití externí knihovny např. na zpracování znaku připadá v úvahu, pokud bude fungovat na linuxu i na windows. Zkoušel jsem knihovnu a tutorial z http://cprogramming.com/tutorial/unicode.html (uplne dole) bohužel nedaří se mi jí připlácnout k mému zdrojáku (dělám klasicky #include utf8.h) .  Hlásí chyby:

Kód: [Vybrat]
utf8.h:7: error: expected ‘)’ before ‘*’ token
utf8.h:10: error: expected declaration specifiers or ‘...’ before ‘u_int32_t’
utf8.h:13: error: expected declaration specifiers or ‘...’ before ‘u_int32_t’
utf8.h:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘u8_nextchar’
utf8.h:36: error: expected declaration specifiers or ‘...’ before ‘u_int32_t’
utf8.h:40: error: expected declaration specifiers or ‘...’ before ‘u_int32_t’
utf8.h:56: error: expected declaration specifiers or ‘...’ before ‘u_int32_t’
utf8.h:60: error: expected declaration specifiers or ‘...’ before ‘u_int32_t’

bohužel se svými chabými znalostmi C tohle nejsem schopen rozlousknout, poradíte?

mk33

  • Člen
  • **
  • Příspěvků: 300
    • Zobrazit profil
Re: ANSI C - UTF8
« Odpověď #1 kdy: 11 Listopadu 2010, 22:44:38 »
No pěkný zadání. Dej dyžtak vědět jak to vyřešíš docela by mě to zajímalo, dneska jsem zkoušel něco na tohle najít a nic. Co zkusit ve skupince zajít za učitelem jestli vám na to něco nedoporučí.

Ještě jsem koukal na zadání prací, co zkusit jedničku, když s tímhle nepohneš. Jde o jedno zadání semestrálky na FJP takže řešený to už několikrát bude a pěkně zdokumentovaný, jen pak udělat výstup do toho jazyka DOT.
začínám tak trpělivost a pevné nervy :-) since  21. Listopad 2006
-------------------------------------------------------------------------
|Aopen MX4SGI-4DN2|P4 2,8GHz HT|2x512MB RAM|ATI 9550|Linux Mint 9 Isadora|  |Asus P4B533|P4 1,8GHz|3x256 MB RAM|ATI 7500|Ubuntu 7.04|  |IBM Thinkpad T40p|Ubuntu 9.04|  |Lenovo Thinkpad T61|Linux Mint 9 Isadora|Lenovo Thinkpad T410|Linux Mint 13

shadius

  • Návštěvník
  • *
  • Příspěvků: 57
    • Zobrazit profil
Re: ANSI C - UTF8
« Odpověď #2 kdy: 01 Prosince 2010, 16:42:03 »
tak jsem to nakonec vyresil tak ze jsem zacal delat neco jinyho a  tomuhle se vratim po case :) ale jinak ekstajn rikal ze nam to kodovani tam dal jenom aby videl co v nas je. Ozvu se urcite az to zase zacnu resit - coz bude za tyden :)

acolade

  • Návštěvník
  • *
  • Příspěvků: 7
    • Zobrazit profil
Re:ANSI C - UTF8
« Odpověď #3 kdy: 01 Listopadu 2012, 08:06:17 »
Výborně!
Řeším podobnou úlohu také od Ekšteina(PC). Takže jak zpracovat textový soubor v cp1250 a zapsat také textový soubor v cp1250?

acolade

  • Návštěvník
  • *
  • Příspěvků: 7
    • Zobrazit profil
Re:ANSI C - UTF8
« Odpověď #4 kdy: 01 Listopadu 2012, 10:11:14 »
Hm, tak jsem se rozhodl reprezentovat jednotlivá písmenka jako pole unsigned int a hotovo. Prostě ze souboru budu číst po dvou bytech. Mně je vlastně úplně jedno, co je to za písmenko. Vezmu jen taková, co jsou v abecedě viz. http://cs.wikipedia.org/wiki/Windows-1250. Převod na malé se provede jen odečtením. Jednotlivá slova jsou oddělena vším, co není v abecedě. Ve finále je to porovnání několika intervalů.

Jo a skombinovane s ctype.h http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.2.html
« Poslední změna: 01 Listopadu 2012, 15:08:10 od acolade »

 


Provoz zaštiťuje spolek OpenAlt.