[ Nedeljko @ 28.06.2011. 09:45 ] @
Postoji li neki prenosiv način na GNU prevodiocima da prihvatim argument komandne linije, koji mora biti tipa char*, a predstavlja ono što Qt zove Local8Bit coding, ali ja bih izbegao da uvlačim ceo Qt. Evo šta sam pokušao:

Code:
int main(int argc, const char* argv[]) {
    if (argc == 2) {
        wchar_t buffer[1000];

        cout << mbstowcs(buffer, argv[1], 999) << endl;
        //...
    }
}


Dobijam na izlazu 4294967295. To je vrednost (size_t) -1. U dokumentaciji za funkciju mbstowcs piše da ta povratna vrednost znači da na ulazu nije bio ispravan multibajt string.
[ Nedeljko @ 28.06.2011. 10:15 ] @
Ovo radi šugavo na Linux-u, dok na Windows-u pod MinGW-ovim g++ kompajlerom radi korektno.
[ Nedeljko @ 28.06.2011. 10:30 ] @
Na windows-u 7 postoji drugi problem, što konzola ne prihvata unicode karaktere (onaj MS-ov cmd.exe ispisuje znakove pitanja).
[ kiklop74 @ 30.06.2011. 14:04 ] @
1. Na Windows 7 standardno se koristi utf8 u konzoli.
2. Ne možeš da koristiš ovaj main za unicode jer unicode podrazumeva wchar_t
Code:

int main(int, char**) {
}

3. Koliko ja znam skoro sve moderne Linux distribucije koriste utf8 u konzoli.
4. Najbolje bi bilo da se koncentrišeš na varijantu konvertovanja ulaznih parametara u utf8 i da to koristiš.

[ Nedeljko @ 30.06.2011. 14:15 ] @
Hvala, ali problem je rešen korišćenjem Qt-a.

Code:
#include <QString>
// ...
int main(int argc, const char* argv[]) {
    // ...
    QString argv1 = QString::fromLocale8Bit(argv[1]);
    // ...
}
// ...


Ovo radi savršeno. QString takođe ima metodu toStdWString() itd.

Moglo je i bez Qt-a pomoću iconv funkcije, ali onda treba voditi računa o kodiranjima. Ovako Qt misli umesto mene.