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.
Cp85
2 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>