banjalukaforum.com

Dobrodošli na banjalukaforum.com
Danas je 05 Jun 2024, 17:14

Sva vremena su u UTC [ DST ]




Započni novu temu Odgovori na temu  [ 23 Posta ]  Idi na stranicu 1, 2  Sledeća
Autoru Poruka
PostPoslato: 17 Okt 2012, 20:17 
OffLine
Majstorski kandidat
Majstorski kandidat

Pridružio se: 15 Feb 2010, 21:45
Postovi: 483
Zanima me na koji nacin mogu da ispisem č, š,... u cmd preko c++-a?


Vrh
 Profil  
 
PostPoslato: 17 Okt 2012, 20:25 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
#include <locale.h>
setlocale(LC_ALL, "");

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 18 Okt 2012, 15:20 
OffLine
Majstorski kandidat
Majstorski kandidat

Pridružio se: 15 Feb 2010, 21:45
Postovi: 483
I kako onda ispisujem, preko cout, wcout ili neceg drugog?


Vrh
 Profil  
 
PostPoslato: 18 Okt 2012, 15:47 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
Čime te volja...

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 19 Okt 2012, 17:57 
OffLine
Majstorski kandidat
Majstorski kandidat

Pridružio se: 15 Feb 2010, 21:45
Postovi: 483
Ne radi. xD


Vrh
 Profil  
 
PostPoslato: 19 Okt 2012, 18:09 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
Radi, radi... neznanje nije opravdanje ;) Ili si ti već rješio problem, pa samo ispituješ kako se to radi... :D

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 19 Okt 2012, 20:48 
OffLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 03 Maj 2008, 10:50
Postovi: 6643
Podesi u konzoli font "Lucida Console", obrati pažnju da ti encoding stringa koji šalješ konzoli odgovara code page-u konzole. Code page za latinski (znači za naša slova) je 852, sa komandom "chcp" možeš provjeriti koji ti je default code page, default je 850. Sa komandom "chcp 852" možeš prebaciti code page konzole na latinski.

_________________
You smug-faced crowds with kindling eye
Who cheer when soldier lads march by,
Sneak home and pray you'll never know
The hell where youth and laughter go.


Vrh
 Profil  
 
PostPoslato: 19 Okt 2012, 22:22 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
Slika

Još šta?

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 10:00 
OffLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 03 Maj 2008, 10:50
Postovi: 6643
Enter, kod tebe koliko vidim je default file encoding UTF-8, što kod momka ne mora biti slucaj. Ti koristiš GNU kompajler, što kod momka ne mora biti slucaj. Kod tebe odmah ispisuje na konzoli kvacice, što zavisi od code-page-a konzole, a kod momka ne mora biti isti code-page kao i kod tebe. Cak i da je instalirao istu verziju Dev-Cpp-a kao i ti, ne znaci da mora funkcionisati kod njega. ANSI može da koristi razlicite code-pages od kompa do kompa, jedan jedini kompjuter može imati totalno poseban code-page, itd...

AIV, napisacu ti par hintova ako ti još uvijek treba.

Naša slova možeš pisati u fajl direktno ili sa unicode escape-sekvencama. Ako pišeš direktno slova sa kvacicama kao što je slušaj u screenshot-u od Entera, onda moraš osigurati da ti je fajl u UTF-8 sacuvan. Ako naša slova pišeš preko unicode escape-sekvenci (npr. Š = \u0160), onda možeš ostaviti default encoding (vecinom ANSI, tj. Cp1252, ali to opet zavisi od sistema i IDE, kod nekih IDE može biti UTF-8 without BOM). Moraš imati na umu da i sam compiler ima default encoding kojim cita fajlove kad ih kompilira.
Znaci, ako encoding tvoga fajla odstupa od default encodinga koji koristi compiler da ucita fajl, moraš pri pozivu kompajlera da mu kažeš koji file-encoding da koristi (pokazacu ti na primjeru).

Druga stvar je da kad kompiliraš svoj izvorni fajl, string-konstante ili string-literali u tvom kodu moraju biti poslani konzoli u pravom encodingu, jer konzola ima svoj encoding koji koristi da dekodira byte-stream koji joj šalje neka aplikacija. Ako recimo konzola koristi code-page Cp850 u kojem nema vecine naših slova, ti možeš slati šta hoćeš i opet nece prikazati sva naša slova, osim toga bitno je da i vrsta fonta konzole bude odgovarajuca jer default tip fonta konzole ne može graficki prikazati naša slova, zato prebaci na "Lucida Console" ako ti ne radi sa default (raster). Znaci cak i kad bi svoje stringove poslao konzoli u Cp850, ne bi vidio sva svoja slova jer jednostavno Cp850 u sebi nema sva naša slova.
Cp852 sadrži sve ono što ti treba, zato svoje stringove možeš kodirati sa Cp852 ili UTF-8 (Cp65001), ali ti i konzola mora koristiti isti taj encoding, znaci aplikacija i konzola moraju koristiti isti kljuc za (de-)kodiranje poruka.


Poci cu od toga da koristiš GNU (g++) kompajler, ako koristiš drugi kompajler onda treba isti princip da primjenis i kod njega. U "Properties" konzole sam podesio font na "Lucida Console". Kad pozivam kompajler predajem mu uvijek opciju -finput-charset=UTF-8 iako je kod mene default UTF-8 tako da je ovo suvišno, ali navodim opciju za slučaj da ti zatreba.

Izvorni kod:
Kod:
#include <iostream>
#include <stdlib.h>

int main(int argc, char *argv[]) {
   using namespace std;
   cout << "ЊŽČĆ - đšžčć\n";
   system("pause");
   return 0;
}


Moji komentari su desno i počinju sa // ***
Kod:
D:\Development\Dev-Cpp 5.3.0.1\Workspace>chcp
Aktive Codepage: 850.

D:\Development\Dev-Cpp 5.3.0.1\Workspace>g++ -finput-charset=UTF-8 -fexec-charset=Cp850 -o main.exe main.cpp
main.cpp: In function 'int main(int, char**)':
main.cpp:8:10: error: converting to execution character set: Illegal byte sequence // *** Ne mogu se sva naša slova prevesti u Cp850

D:\Development\Dev-Cpp 5.3.0.1\Workspace>g++ -finput-charset=UTF-8 -fexec-charset=Cp852 -o main.exe main.cpp

D:\Development\Dev-Cpp 5.3.0.1\Workspace>main
еªÅ¼ - ðþºåƒ      // *** Ne radi jer iako sada šaljem naša slova encodirana sa Cp852, konzola još uvijek interpretira byte-stream sa Cp850 ....
Drücken Sie eine beliebige Taste . . .

D:\Development\Dev-Cpp 5.3.0.1\Workspace>chcp 852 // *** ... Zato mijenjam code-page konzole
Aktive Codepage: 852.

D:\Development\Dev-Cpp 5.3.0.1\Workspace>main
ĐŠŽĆČ - đšžćč // *** OK!
Drücken Sie eine beliebige Taste . . .

D:\Development\Dev-Cpp 5.3.0.1\Workspace>chcp 65001 // Sada mijenjam u Windowsow code-page za UTF-8
Aktive Codepage: 65001.

D:\Development\Dev-Cpp 5.3.0.1\Workspace>main
�榏� - �秆� // *** Ne radi jer je byte-stream kodiran sa Cp852 ....
Drücken Sie eine beliebige Taste . . .

D:\Development\Dev-Cpp 5.3.0.1\Workspace>g++ -finput-charset=UTF-8 -fexec-charset=UTF-8  -o main.exe main.cpp // *** ... Zato kodiram byte-stream sa UTF-8

D:\Development\Dev-Cpp 5.3.0.1\Workspace>main
��ŠŽĆČ - đšžćč // *** Radi osim za 'Đ', to je kod mene slučaj, možda kod tebe radi
Drücken Sie eine beliebige Taste . . .

D:\Development\Dev-Cpp 5.3.0.1\Workspace>

_________________
You smug-faced crowds with kindling eye
Who cheer when soldier lads march by,
Sneak home and pray you'll never know
The hell where youth and laughter go.


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 11:02 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
setlocale - C++ Reference
setlocale(LC_ALL, NULL) vraća Bosnian (Latin)_Bosnia and Herzegovina.1250, kako je i podešeno na računaru; ako je podešen neki drugi locale, ispris neće raditi pravilno, naravno.
GCC sam koristio za primjer, isto se ponašaju i MSVC i ICL... ali čisto sumnjam da će mu sve ovo napisano biti od pomoći ;)

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 11:18 
OffLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 03 Maj 2008, 10:50
Postovi: 6643
Šta ti izbaci u konzoli kad ukucaš "chcp" ili "mode con", koji code-page, pretpostavljam 1250 ? AIV nije napisao koji locale ima.

_________________
You smug-faced crowds with kindling eye
Who cheer when soldier lads march by,
Sneak home and pray you'll never know
The hell where youth and laughter go.


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 11:28 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
852, zato što je tako podešeno na Windowsu, ali setlocale radi override toga... npr.:
Kod:
#include <iostream>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]) {
   using namespace std;
   setlocale(LC_ALL, "C");
   cout<<"ŠĐČĆŽ\n";
   system("chcp");
   return 0;
}
ispisuje:
Kod:
Őđ╚ĂÄ
Active code page: 852

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 11:54 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
I naravno, ovo što sam naveo kao primjer zavisi od locale-a setovanog na mašini. Ako se ručno setuje naš locale (sa setlocale), a code page konzole je 850 (ili neki drugi), dobiće ispis naših slova bez interpukcijskih znakova (a ne brljotinu).
Kod:
#include <iostream>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]) {
   using namespace std;
   system("chcp 850");
   setlocale(LC_ALL, "Bosnian (Latin)_Bosnia and Herzegovina.1250");
   cout<<"ŠĐČĆŽ\n";
   return 0;
}
Kod:
Active code page: 850
SDCCZ
U tom slučaju, tvoje rješenje je univerzalnije...

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 13:00 
OffLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 03 Maj 2008, 10:50
Postovi: 6643
Mislim da locale nije potreban posto samo tangira funkcije koje formatiraju datum i valutu, na obične stringove mislim da nema uticaja, ne znam..

AIV, možeš da probaš ovako:

Kod:
#include <iostream>
#include <stdlib.h>

int main(int argc, char *argv[]) {
   using namespace std;
   system("chcp 852"); // *** ovo je najvaznije, da na pocetku aplikacije promijenis code-page konzole
   cout << "ĐŠŽČĆ - đšžčć\n\n";
   return 0;
}


A fajl kompiliraš sa:
Kod:
g++ -fexec-charset=Cp852 -o main.exe main.cpp


Ono sa system("chcp 852") je ruzno i ne preporucuje se da se koristi system, ali svasta se nesto preporucuje pa se ipak koristi, i Eclipse obilno koristi Runtime.exec().

Mali hint: sa setlocale(LC_ALL, ".852") mozes promijeniti code-page bez da mijenjas zemlju i jezik.

_________________
You smug-faced crowds with kindling eye
Who cheer when soldier lads march by,
Sneak home and pray you'll never know
The hell where youth and laughter go.


Vrh
 Profil  
 
PostPoslato: 20 Okt 2012, 13:39 
OffLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 13 Okt 2008, 12:59
Postovi: 9337
Hahah, klasicna AIV tema - covjek uradio zadacu i vise se ne pojavljuje.


Vrh
 Profil  
 
PostPoslato: 21 Okt 2012, 20:29 
OffLine
Majstorski kandidat
Majstorski kandidat

Pridružio se: 15 Feb 2010, 21:45
Postovi: 483
Ma kakva zadaca, evo sjetio sa se sad da sam postavio temu pa da provjerim sve ovo sto ste napisali :)


Vrh
 Profil  
 
PostPoslato: 21 Okt 2012, 21:34 
OffLine
Majstorski kandidat
Majstorski kandidat

Pridružio se: 15 Feb 2010, 21:45
Postovi: 483
Nista od ovoga ne radi, inace koristim Visual Studio 2012.


Vrh
 Profil  
 
PostPoslato: 21 Okt 2012, 21:45 
OffLine
Urednik
Urednik
Korisnikov avatar

Pridružio se: 21 Nov 2007, 09:26
Postovi: 17219
Lokacija: Q5HW+6W
Kao što već jednom napisah, neznanje nije opravdanje ;)

_________________
Slika


Vrh
 Profil  
 
PostPoslato: 22 Okt 2012, 08:49 
OffLine
Majstorski kandidat
Majstorski kandidat

Pridružio se: 15 Feb 2010, 21:45
Postovi: 483
Hoce li neko da mu dam team viewer pa da mi udje u kompjuter i pogleda zasto ne radi?


Vrh
 Profil  
 
PostPoslato: 22 Okt 2012, 10:18 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 08 Okt 2003, 12:10
Postovi: 2552
Lokacija: Banja Luka
AIV je napisao:
Hoce li neko da mu dam team viewer pa da mi udje u kompjuter i pogleda zasto ne radi?

Na debeloj sam kušnji, ali odoliću nekako :lol: .

_________________
dejo the best - professional


Vrh
 Profil  
 
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Odgovori na temu  [ 23 Posta ]  Idi na stranicu 1, 2  Sledeća

Sva vremena su u UTC [ DST ]


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 1 gost


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Powered by phpBB® Forum Software © phpBB Group
Hosting BitLab
Prevod - www.CyberCom.rs