DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > Programiranje
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

Programiranje Java, Perl, VB, ASP, .NET, C, C++, Pascal, Delphi Sponzor: VIP izazov 3

Odgovori
 
Alati teme Način prikaza
Staro 24. 04. 2011.   #1
morando
nedovoljno naspavan
Na probnom radu
 
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
morando is on a distinguished road
Default [C++] Unicode je horor

Pošto sam relativno početnik (programiranje mi dođe kao hobi), imam velikih problema oko razumevanja ANSI vs UNICODE i korišćenja raznih funkcija koje ih koriste (vezano za unos i iznos (kako da ga nazovem na srpskom)).
Dosta puta sam pretraživao po net-u o detaljima vezanim za Unicode, ali nigde nema konkretno objašnjeno (uprošćeno) ili naći nešto kodova/primera što je veoma teško,
kao da su svi koji su pisali želeli da zvuče stručno (u očima drugih, kao da prave za njih same a ne za nekog početnika koji hoće da nauči/razume, mada je to nažalost slučaj i sa dosta drugih knjiga/tutoriala) ubacivali brdo zbunjujućih/komplikovanih stvari u takav text tako da se vraćam na sam početak po hiljadu puta.
Pošto koristim vs 2010 express, uvek kad bih pravio neku aplikaciju isključivao bih opciju "Use unicode character set".
Tek skoro sam "provalio" kako da podesim (iako je gore navedeno isključeno) da prikazujem/snimam podatke sa "našim" latiničnim slovima (npr. ŠĐČŽĆ), evo test koda:
Kôd:
#include <iostream>
#include <string>
#include <fstream>
#include <locale>

int main()
{
	setlocale(LC_ALL, ".1250");
	std::string slova = "ŠĐČŽĆ";
	std::cout << "Test slova u konzoli - " << slova << std::endl;

	std::ofstream out("out.txt");
	out << slova;
	out.close();

	std::ifstream in("out.txt");
	in >> slova;
	in.close();
	std::cout << "Test slova u konzoli - " << slova << std::endl;

	std::cout << "Press enter to exit...";
	std::cin.get();
	return 0;
}
što znači da mi ne treba unicode ako bih aplikacije suzio samo na engleski i srpski jezik.?
Tako da bih za sad ostao na ovom ANSI-ju dok ne skapiram ovo drugo, mada me samo plaši text sa ove stranice:
Citat:
ANSI code pages can be different on different computers, or can be changed for a single computer, leading to data corruption. For the most consistent results, applications should use Unicode, such as UTF-8 or UTF-16, instead of a specific code page.
Kako da, i šta da podesim da mi ovo funkcioniše sa "setlocale" funkcijom ako je moguće? a da ostanem na ANSI-ju.
Koji su to drugi kompjuteri i kako/gde bi neko ovo mogao da promeni?

Ako ima neko ljubazan da mi pomogne, objasni i/ili iskopa neki link tipa "Unicode for dummies" ili bolje ako ima "Unicode for dumber then dummies" da bih ovo skapiro.
Hvala puno unapred.
morando je offline   Odgovorite uz citat
Staro 24. 04. 2011.   #2
morando
nedovoljno naspavan
Na probnom radu
 
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
morando is on a distinguished road
Default

Da dodam, pogledajte desni prozor na screenshot-u:

Koliko sam razumeo ovo bi trebalo da koriste programi koji su podešeni da ne korite unicode (kao što sam naveo u prvom postu o podešavanju u IDE-u što koristim)
tako da bi ona slova trebalo da rade bez pozivanja funkcije "setlocale" iz mog primera, ali ipak NE radi!?! WTF?
morando je offline   Odgovorite uz citat
Staro 24. 04. 2011.   #3
Dragi Tata
dinosaurus
Master
 
Avatar Dragi Tata
 
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
Dragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoro
Default

Ех, својевремено сам написао баш симпатичан увод у Јуникод али не знам да ли сад негде може да се нађе с обзиром да је сајт на коме је хостован у међувремену угашен.

Улавном, можда није лоша идеја да почнеш одавде: http://www.joelonsoftware.com/articles/Unicode.html

Ако ништа друго, бар ћеш да видиш колико је то компликована тема
Dragi Tata je offline   Odgovorite uz citat
"Hvala" Dragi Tata za poruku:
Staro 24. 04. 2011.   #4
morando
nedovoljno naspavan
Na probnom radu
 
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
morando is on a distinguished road
Default

Hvala na linku. Elem, nekako sam "prežvakao" sav taj tekst i koliko sam razumeo neki danasnji standard je da se koristi utf8 sistem za enkodovanje (pored ostalih koji se manje koriste)
ali me sad buni kako bih recimo pročitao neki tekstualni fajl (koji je utf8 enk.) kada svaki karakter/slovo može biti od 1 - 6 byte-a, odnosno ušta da "uskladištim" tekst?
char je 8 bit-a a wchar_t je 16 ??? Bar mislim da je tako, jer u nekim tekstovima sam pročitao da ne mora da znaci.

Kad nađete vremena postavite još neki link ako ima vezano na temu jer bih stvarno želeo da skontam ovo i završim priču sa unicodom.
Hvala unapred.
morando je offline   Odgovorite uz citat
Staro 24. 04. 2011.   #5
morando
nedovoljno naspavan
Na probnom radu
 
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
morando is on a distinguished road
Default

Imam jos jedno pitanje.
Pretpostavljam da funkcija "setlocale" "deluje globalno" odnosno za taj program koji je poziva? A da li onda pozivanje funkcije "imbue" (postavlja locale) recimo na moj ofstream out važi samo za taj objekat?
morando je offline   Odgovorite uz citat
Staro 25. 04. 2011.   #6
Dragi Tata
dinosaurus
Master
 
Avatar Dragi Tata
 
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
Dragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoro
Default

UTF-8 енкодован текст можеш да држиш у обичном std::string објекту. Наравно, мораш да будеш свестан да један char значи 1 бајт, а не једно слово, али то је ионако већ случај и у другим мултибајт енкодним шемама.

За манипулисање UTF-8 текстом из С++а, погледај ову малу и једноставну библиотеку (библиотека је доста популарна, мада аутору не бих дао ни овце да чува ) http://utfcpp.sourceforge.net/

Што се тиче механизама стандардне С++ библиотеке: стримови, локали, итд, то ваљда Свевишњи разуме, а мени смртнику не пада на памет да се тиме бакћем
Dragi Tata je offline   Odgovorite uz citat
"Hvala" Dragi Tata za poruku:
Staro 25. 04. 2011.   #7
degojs
I'm a PC too.
Wrote a book
 
Avatar degojs
 
Datum učlanjenja: 06.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
degojs će postati "faca" uskorodegojs će postati "faca" uskoro
Default

Evo kopije teksta "Uvod u Unicode", zakačio sam html fajl.
Priloženi fajlovi
Tip fajla: html Uvod u Unicode.html (7,5 KB, 936 pregleda)
__________________
Commercial-Free !!!
degojs je offline   Odgovorite uz citat
2 članova zahvaljuje degojs za poruku:
Staro 25. 04. 2011.   #8
jablan
VD IT Direktora
Invented the damn thing
 
Avatar jablan
 
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
jablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamen
Default

Off Topic: Znam da nije tema, ali C++ definitivno ne bih preporučio programeru hobisti.
__________________
blog
jablan je offline   Odgovorite uz citat
Staro 25. 04. 2011.   #9
morando
nedovoljno naspavan
Na probnom radu
 
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
morando is on a distinguished road
Default

Ljudi hvala puno na trudu i pomoći.
@Tata
Probaću ovu biblioteku što si mi predložio mada mi se na prvi pogled ne sviđa kako ona radi jer dosta funkcija (kada je podeseno "Use uniocode char set") traži kao parametar wchar_t (unsigned int) pa bih morao non-stop da radim konverziju "utf8::utf8to16" što pravi dodatne kopije teksta pa nije baš pogodno za aplikacije gde je brzina bitna, ali ću ipak da se malo zezam sa njom.
@jablan
Ja sam mazohista, uvek mi je nešto više slađe kad ga teže dobijem.
morando je offline   Odgovorite uz citat
Staro 25. 04. 2011.   #10
Dragi Tata
dinosaurus
Master
 
Avatar Dragi Tata
 
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
Dragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoro
Default

Citat:
Originalno napisao morando Pogledajte poruku
Probaću ovu biblioteku što si mi predložio mada mi se na prvi pogled ne sviđa kako ona radi jer dosta funkcija (kada je podeseno "Use uniocode char set") traži kao parametar wchar_t (unsigned int) pa bih morao non-stop da radim konverziju "utf8::utf8to16" što pravi dodatne kopije teksta pa nije baš pogodno za aplikacije gde je brzina bitna, ali ću ipak da se malo zezam sa njom.
Чисто да не буде забуне: кад поставиш "Use uniocode char set" то значи да Windows API функције примају текст као UTF-16 енкодован wchar_t*. Ако се тиме бавиш, онда је најбоље да користиш wstring објекте. Имао сам утисак да питаш како да манипулишеш UTF-8 стринговима, а за то је одговор библиотека коју сам поменуо.
Dragi Tata je offline   Odgovorite uz citat
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum


Vreme je GMT +2. Trenutno vreme je 18:51.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.