Fragen zu UnicodeString



  • Hallo,

    das Thema UnicodeString wurde schon mehrfach angesprochen, doch leider hat es meine Fragen noch nicht ganz beantwortet. Ich habe verstanden das ab CB2009 nun UnicodeString der Standard ist. Habe beim CB XE in den Projektoptionen _TCHAR entspricht wchar_t eingetragen.

    1. Frage

    String test = L"Test[e]omega[/e]";
    Application->MessageBox(test.c_str(), L"TEST",MB_OK + MB_ICONEXCLAMATION);
    

    Die MB zeigt den richtigen Text inkl. des ω an. Nun möchte ich aber RightStr verwenden um beispielsweise nur "stω" anzeigen zu lassen.
    Aber RightStr verlangt ja AnsiString, da wäre ja das Unicode-Zeichen verschwunden. Außerdem kommt Fehler (Mehrdeutigkeit...).

    Wie wendet man LeftStr bzw. RightStr bei Unicode richtig an?

    2. Frage
    Klingt jetzt vielleicht blöd aber ich verstehe noch nicht richtig den Unterschied zwischen String und UnicodeString. Wann verwendet man denn UnicodeString für eine Variable? Der normale String kann ja Unicodeinformationen enthalten!?

    Danke im Voraus!



  • zu 2.:
    wie du schon gesagt hast, ist ab ner bestimmten Version UnicodeString Standard. Und mit Standard ist der Typ String gemeint. Früher war String ein typedef (?) für AnsiString und jetzt ist er es halt für UnicodeString. Ob du nun String oder UnicodeString schreibst, ist egal.

    greetz KN4CK3R



  • Danke, da bleibt nur noch der Pkt.1 offen...?



  • Ich denke LeftStr und RightStr sind alte Funktionen, noch aus Turbo Pascal Zeiten. Die haben nur Überladungen für AnsiString und WideString.

    Was geht ist sowas

    void __fastcall TfrmMain::btnTestClick(TObject *Sender)
    {
    	String s = L"Testω";  // <- Im Quelltext steht omega statt &#969
    	ShowMessage(s.SubString(s.Length() - 2, 3));
    }
    

    Wenn es in der VCL Nachfolger für LeftStr/RightStr gibt, sind sie mir nicht bekannt, bin aber auch mehr mit Visual Studio unterwegs ...



  • Danke, an SubString habe ich garnicht gedacht. So geht es eigentlich auch.
    Vielleicht finde ich ja noch heraus, ob es einen "Nachfolger" für LeftStr/RightStr gibt.



  • den "Nachfolger" kannst du dir ja per SubString jetzt selbst bauen 😉

    greetz KN4CK3R



  • ja das könnte man über eine Funktion machen, wobei es eigentlich kein größerer Aufwand ist gleich SubString zu verwenden und den passenden Index zu setzen.
    Danke.


Anmelden zum Antworten