UnicodeString und string?



  • Ich habe eine DLL bekommen in der alle Funktionen mit string (std) arbeiten. Ich möchte das in ein Eingabefeld und Labels ausgeben. Wie muss man das konvertieren? Mein Programm ist ansonsten überall UnicodeString(RAD Studio 2009).

    Beispiel:

    string inx = xml.GetVersion();
    Form1->Caption = "Value: " + inx; // [BCC32 Fehler] E2034 Konvertierung von 'string' nach 'UnicodeString' nicht möglich
    

    Ist "string" Unicode kompatibel? Angeblich soll die DLL Unicode können, aber ich sehe in der Header nur string und das ist doch nicht Unicodefähig, oder?



  • Hallo,

    string inx = xml.GetVersion(); 
    UnicodeString value = inx.c_str();
    Form1->Caption = "Value: " + value;
    

    sollte ausreichen!

    LG



  • STR schrieb:

    Angeblich soll die DLL Unicode können, aber ich sehe in der Header nur string

    Dann bezieht sich die Aussage vermutlich darauf, daß du in std::string UTF-8-codierte Daten unterbringen kannst. Das ginge etwa so:

    // hin...
    std::string utf8Encode (String str)
    {
        return UTF8String (str).c_str ();
    }
    
      // ... und zurück
    String utf8Decode (const std::string& str)
    {
        return String (UTF8String (str.c_str ());
    }
    


  • Vielen Dank euch beiden!

    Eine Frage hätte ich noch und würde die Problematik UnicodeString und std::string abrunden. 😉

    Ich habe einen UnicodeString und will diesen einem string übergeben.
    std::String = UnicodeString

    UnicodeString value = "hallo world";
    
    string inx = value; // [BCC32 Fehler] E2285 Keine Übereinstimmung für 'string::basic_string(const string&)' gefunden
    
    string inx = value.c_str(); // [BCC32 Fehler] E2285 Keine Übereinstimmung für 'string::basic_string(const string&)' gefunden
    
    string inx = AnsiSring(value).c_str(); // Klappt, aber ist das so richtig?
    


  • Hallo

    3. ist grundsätzlich richtig. Aber bitte beachte das beim direkten Konvertieren von UnicodeString in AnsiString alle Zeichen verloren gehen, die nicht in der aktuell lokalen Codepage enthalten sind (Also auf einem üblichem deutschen Betriebssystem z.B. alle kyrillischen Zeichen).
    Dagegen hilft nur der Umweg über UTF8, wie schon gezeigt.

    bis bald
    akari



  • Ah stimmt. Ich hatte das utf8Encode bei diesem Beispiel probiert und erhalte da leider nur für chinesische Zeichen kryptische im PDF. Daher dachte ich es klappt so doch nicht.

    // Definition in Header: int DrawText(double XPos, double YPos, const std::string& Text);
    
    UnicodeString Text = L"Hello 排水量 world from C++";
    QP.DrawText(100, 500, utf8Encode(Text));
    
    // Ausgabe im PDF: Hello æŽ’æ°´é‡ world from C++
    

    Vermutlich liegt der Fehler dann nicht an utf8Encode?

    EDIT: Der HTML-Code in Text sollen eigentlich chinesische Zeichen darstellen, welche die Forensoftware wohl in HTML-Entities konvertiert.



  • da sollte eigentlich Decode die richtige Funktion sein. Weil utf8 ist es schon.

    greetz KN4CK3R


Anmelden zum Antworten