c ++ - Sådan konverteres QString til LPCSTR (Unicode)

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg konvertere QString til LPCSTR?


Hvordan gør jeg det når #ifdef UNICODE er defineret, og når det ikke er?


Mange tak :)

Bedste reference


Jeg tror:


QString str("ddddd");
LPCSTR lstr = str.toStdString().c\_str();

Andre referencer 1


QString kan altid holde Unicode; LPCSTR er aldrig Unicode. Det betyder, at man skal overveje, hvad man skal gøre med de tegn, der ikke passer. Det er ikke en 'hvilken metode man skal bruge' spørgsmål, men et design spørgsmål.


Det er helt muligt, at du i dit specifikke tilfælde ved, at QString kun indeholder tegn fra din lokale 'ANSI' kodeks (også kendt som ACP. I så fald er den korrekte funktion QString::toLocal8Bit ().


Alternativt kan du vide, at QString kun indeholder tegn fra Latin1 (ISO 8859-1). I så fald er den korrekte funktion QString::toLatin1().


Du kan forsøge at ringe QString::toUtf8(). Dette vil altid producere et gyldigt byte-array, selvom QString indeholdt alle Unicode-tegn. Formelt kan du imidlertid ikke pege på LPCSTR: UTF-8 er ikke en gyldig ACP kodeside. Og du vil sandsynligvis have denne LPCSTR til at overføre til en anden funktion uden for din kontrol . Det er sandsynligt, at funktionen ikke venter UTF-8. Hvis det forventede Unicode overhovedet, ville det tage en LPCWSTR.

Andre referencer 2


Jeg fandt følgende løsning herfra, og det virker perfekt for mig: [17]


void fooSub(LPSTSTR X); // this is our function :-)

foo()
{
    QString text;
    if(sizeof(TCHAR) == 1)
        fooSub((LPCSTR)text.toLocal8Bit().constData()); // here you have to check, how to convert, you could also use utf8(), ...
    else
        fooSub((LPCWSTR)text.utf16());
}

Andre referencer 3


LPCSTR == const char *


det er ikke unicode, da



  LPCSTR s=(const char *) qtString;