Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 1.787 pregleda

Najnovija ↓

Prihvatanje unicode argumenata komandne linije 28.06.2011. u 10:45 · pre 186 meseci #1
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.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Prihvatanje unicode argumenata komandne linije 28.06.2011. u 11:15 · pre 186 meseci #2
Ovo radi šugavo na Linux-u, dok na Windows-u pod MinGW-ovim g++ kompajlerom radi korektno.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Prihvatanje unicode argumenata komandne linije 28.06.2011. u 11:30 · pre 186 meseci #3
Na windows-u 7 postoji drugi problem, što konzola ne prihvata unicode karaktere (onaj MS-ov cmd.exe ispisuje znakove pitanja).
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Prihvatanje unicode argumenata komandne linije 30.06.2011. u 15:04 · pre 186 meseci #4
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š.

Potpis
Tko leti vrijedi
Re: Prihvatanje unicode argumenata komandne linije 30.06.2011. u 15:15 · pre 186 meseci #5
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.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme