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

Prihvatanje unicode argumenata komandne linije

[es] :: C/C++ programiranje :: Prihvatanje unicode argumenata komandne linije

[ Pregleda: 1152 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
89.216.32.*



+2790 Profil

icon Prihvatanje unicode argumenata komandne linije28.06.2011. u 09:45 - pre 156 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
89.216.32.*



+2790 Profil

icon Re: Prihvatanje unicode argumenata komandne linije28.06.2011. u 10:15 - pre 156 meseci
Ovo radi šugavo na Linux-u, dok na Windows-u pod MinGW-ovim g++ kompajlerom radi korektno.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
89.216.32.*



+2790 Profil

icon Re: Prihvatanje unicode argumenata komandne linije28.06.2011. u 10:30 - pre 156 meseci
Na windows-u 7 postoji drugi problem, što konzola ne prihvata unicode karaktere (onaj MS-ov cmd.exe ispisuje znakove pitanja).
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.telecentro-reversos.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Prihvatanje unicode argumenata komandne linije30.06.2011. u 14:04 - pre 156 meseci
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š.


Tko leti vrijedi
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
89.216.32.*



+2790 Profil

icon Re: Prihvatanje unicode argumenata komandne linije30.06.2011. u 14:15 - pre 156 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Prihvatanje unicode argumenata komandne linije

[ Pregleda: 1152 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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