Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Obrada i prikaz teksta i rezultata obrade teksta u Unicode

[es] :: C/C++ programiranje :: Obrada i prikaz teksta i rezultata obrade teksta u Unicode

[ Pregleda: 3389 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Registrovani clan
student

Član broj: 210914
Poruke: 4
*.telrad.net.



Profil

icon Obrada i prikaz teksta i rezultata obrade teksta u Unicode11.02.2009. u 10:42 - pre 184 meseci
Pozdravljam sve clanove ovog korisnog i zanimljivog foruma! Ovo mi je prva poruka.
Imam problem da tekst u Unicode (dakle napisan cirilicom ili na grckom,nemackom,italijanskom,japanskom ili bilo kom drugom jeziku koji sem ascii znakova koriste i znakove koji nisu obuhvaceni ascii kodom vec unicode, utf-8 ili nekim slicnim kodom) prikazem na ekranu onakav kakav je u datoteci iz koje ga citam i da prebrojim slova,reci i sl. (to mi nije problem u ascii kodu vec u unicode) u tom tekstu i da takodje to prikazem na ekranu. Gledao sam na Internetu,ima dosta stvari o Unicode, ali nikako ne mogu da nadjem ovo sto mi konkretno treba. Program pisem u C jeziku,a okruzenje koje koristim je Microsoft Visual C++ 6.0.
Unapred hvala na pomoci!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode14.02.2009. u 16:20 - pre 184 meseci
Ako ti program radi u konzoli onda ne možeš da prikazuješ Unicode karaktere. Aplikacija mora da bude u prozoru. Imaš li neko konkretno pitanje, pošto je glupo da ti ljudi pričaju ono što već znaš. Gde tačno imaš problem?
 
Odgovor na temu

Registrovani clan
student

Član broj: 210914
Poruke: 4
*.telrad.net.



Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode14.02.2009. u 21:14 - pre 184 meseci
Sve prikazujem u Command prompt DOS-a.
Evo jednog konkretnijeg pitanja. Kako da napravim npr. sledeci program?

Ispisati broj reci i slova,kao i broj pojavljivanja slova č i ć u sledecem tekstu: "Milan Čavić je prvak sveta. Večeras ćemo svi slaviti."

Dakle, prvo sta staviti u preprocesoru? Da li treba na primer staviti #include <TCHAR.h>, pa zatim #define _UNICODE? Ili ako koristimo UTF-8,a ne UNICODE treba samo napisati #include <utf-8.h>? Ili jos dosta toga treba napisati u preprocesoru? Naravno, kao i za ASCII kod podrazumeva se #include <stdio.h>, #include <iostream.h> i slicno, ali problem je sta u preprocesoru napisati vezano za UNICODE. Dalje, sta napisati u samom programu (u main-u programa)?Znam za ASCII kod da napisem celi program za bilo koji tekst, ali za UNICODE ne umem. Svasta sam na Internetu pronalazio i svasta kombinovao, dugo vremena se mucim da ovo resim,ali nikako da uspem. Dakle, da li neko zna da resi ovaj gore kratki primer? Moze u UNICODE, a moze i bilo koji drugi kod koji nije ASCII kod, ali da moze da mi ispise ovo sto mi trazi. Hvala!
 
Odgovor na temu

Registrovani clan
student

Član broj: 210914
Poruke: 4
*.telrad.net.



Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode14.02.2009. u 21:22 - pre 184 meseci
Napomena: I ovako napisan tekst, iako je u latinici, nije u ASCII kodu, jer ima slova č i ć,pa ko zna moze da resava ovaj problem i ovako latinicno napisan, ali pozeljnije bi bilo da pokusa da resi problem sa tekstom u cirilici, jer sam ovaj tekst i postavio kao problem u cirilici, ali ne moze da se prikaze u cirilici, pa je tako ovde prikazan u latinici.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode14.02.2009. u 21:29 - pre 184 meseci
Pogledaj prvo http://sr.wikipedia.org/wiki/%D0%A3%D0%A2%D0%A4-8 deo Ukratko o UTF-8 i priloženu šemu, a potom Tabelu kodova za naša slova u nastavku članka pa će ti biti jasnije.

UTF-8 je kodna strana u kojoj niz dužine od 1 do 4 bajta označava jedno slovo. Slova iz ASCII-ja se poklapaju (dužina im je po jedan bajt), a ć je na primer 0xC4 0x86 (dužina dva bajta). Da bi prebrojao broj pojavljivanja "ć" tražiš 0xC4 za kojim sledi 0x86.

Naravno, možeš da koristiš neku biblioteku koja će ti olakšati time što će getchar() zameniti sa nečim što učitava naredno UTF-8 slovo nezavisno od njegove širine.

Ne verujem da je tačno da ne možeš da prikazuješ UTF-8 u terminalu, svaki GNU/Linux terminal emulator zna da prikaže UTF-8 tekst, a siguran sam da postoji štos i za Windowsov prompt. U svakom slučaju prikazivanje tebi i ne treba.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode15.02.2009. u 02:15 - pre 184 meseci
Ako otvoriš konzolu (DOS prompt), i promeniš font u Lucida Console onda možeš da kucaš našu ćirilicu i latinicu, i pretpostavljam sva druga evropska pisma, ali ne i hebrejsko i arapsko, a o daljem istoku da i ne govorimo. Čak i tako, u full screenu ćirilica se ne vidi. Znači ne vidi se pun Unicode. Ako ti je ovo prihvatljivo onda je pola posla završeno. Napravi novi projekat iz vizarda. Nemam VC6 pri sebi, ali negde tokom kreiranja projekta treba na uključiš podršku za Unicode. Može i postojeći projekat da se prebaci na Unicode, ali nekoliko stvari treba ručno da se promeni. Elem, treba da ti je definisan _UNICODE makro na nivou celog projekta, umesto main() treba da imaš _tmain(), umesto svih uobičajenih C funkcija treba da koristiš _t ekvivalente, umesto std::string treba std::wstring, itd. Svaki string koji ispisuješ treba da ima L prefiks, na primer: L"Milan \U010Cavi\U0107 je prvak sveta. Ve\U010Deras \U0107emo svi slaviti.". Možeš da koristiš i naša latinična slova ako postaviš Serbian (Latin) kao Language for non-Unicode programs u Regional and Language Options u Control Panelu. Ako ćeš u sorsu da mešaš pisma onda moraš da koristiš Unicode kodove.

Problem sa promenom fonta je što to moraš da radiš svaki put kad pokreneš aplikaciju. Na Visti postoji funkcija kojom se menja font u konzoli, ali za XP moraš da se snalaziš. Ovaj link može da pomogne: http://www.microsoft.com/commu...en&cr=US&sloc=&p=1

Rešavaj problem postepeno. Prva prepreka je pisanje i čitanje svih slova koja ti trebaju. Kad jednom napraviš aplikaciju koja lepo ispisuje sva slova onda pređi na sledeću fazu, a to je čitanje stringa (nisam razumeo da li korisnik ukucava tekst, ili je u fajlu), pa kad ti i to prođe onda pređi na algoritam. Onda se javi ponovo.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode15.02.2009. u 08:38 - pre 184 meseci
Windows konzola sasvim regularno podržava prikaz full unicode teksta, to što tebi treba je WriteConsoleW funkcija.
 
Odgovor na temu

Registrovani clan
student

Član broj: 210914
Poruke: 4
*.telrad.net.



Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode16.02.2009. u 13:58 - pre 184 meseci
Hvala svima na odgovorima! Primenio sam sve ovo sto je Mihajlo napisao,ali ne dobijam to sto mi treba. Samo prvo da odgovorim Mihajlu - zadatak mi je da citam i analiziram tekst iz datoteke,a ne sa tastature.
Evo sad primera kratkog programa koji samo ispisuje tekst:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <tchar.h>
#define _UNICODE
void _tmain (){wprintf(L"%S","Milan\U010Cavi\U0107 je prvak sveta. Ve\U010Deras \U0107emo svi slaviti.");}


Kad tako napisem wprintf funkciju dobijam sve doslovno kao izmedju navodnika,dakle i npr. \U0107 se prikaze upravo tako, a ne kao Unicode karakter tj. kao slovo ć.
A ako napisem npr. ovako:

Code:
wprintf(L"%S%c%S", "Milan", \u010C, "avi\U0107 je prvak sveta. Ve\U010Deras \U0107emo svi slaviti.");}


tada ono sto je pod navodnicima tj. string opet se doslovno tako ispise, ali i \u010C se isto doslovno ispise iako je izvan navodnika i nad njim je upotrebljena konverzija u karakter: %c . Ovo je konverzija koja se koristi nad ASCII karakterima i verovatno nema dejstvo nad Unicode karakterima. A kad umesto kodovanog Unicode karaktera \uxxxx napisem sam karakter u Unicode onakav kakav jeste onda se na ekranu prikazu nedefinisani znaci. Da li onda uopste treba ovako raditi ili treba drugacije sve ovo raditi u kodu? Ostalo sam sve podesio kako mi je Mihajlo objasnio, ali verovatno mi kod mora biti drugaciji.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Obrada i prikaz teksta i rezultata obrade teksta u Unicode17.02.2009. u 11:22 - pre 184 meseci
Hm, da, ne znam otkud mi \U kad u MSDN-u lepo piše \x: http://msdn.microsoft.com/en-us/library/h21280bw(VS.71).aspx

Na žalost, čak i kad staviš \x mešanje ćirilice i latinice neće raditi jer wprintf zahteva da string bude u jednom lokalitetu (oni to zovu "locale", funkcija je setlocale) i da bi se slova videla to mora da bude onaj lokalitet setovan u Control Panelu za non-Unicode aplikacije. Ako bi debagovao unutar wprintf video bi da se dolazi do C funkcije wctomb i SDK funkcije WideCharToMultiByte, koja "ubija" Unicode. Meni je misterija zašto su to uradili, verovatno je u pitanju kompatibilnost sa postojećim kodom.

Ono što ti možeš da koristiš je šta savkic kaže, WriteConsole:

Code:
wchar_t temp[] = L"\x0420\x0435\x043F\x0443\x0431\x043B\x0438\x043A\x0430\x0020\x0421\x0440\x0431\x0438\x0458\x0430\n";
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), temp, (DWORD)_tcslen(temp), NULL, NULL);


Ako ti treba printf funkcionalnost, onda iskoristi swprintf da formiraš string, pa WriteConsole da ga ispišeš. Može čak i funkcija da se napravi:

Code:
BOOL wprintf_ex(const wchar_t* format, ...)
{
    CString temp;
    va_list params;
    va_start(params, format);

    temp.FormatV(format, params);
    return WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), temp, temp.GetLength(), NULL, NULL);
}


Ovde je korišćen CString umesto WCHAR temp[neki_broj], jer omogućava dinamičku dužinu stringa.

[Ovu poruku je menjao Mihajlo Cvetanović dana 17.02.2009. u 12:38 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: Obrada i prikaz teksta i rezultata obrade teksta u Unicode

[ Pregleda: 3389 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.