Unicode => Ansi und zurück



  • Du kannst es versuchen als UTF8 in die Datenbank zu schreiben, wobei hiermit viele DBs Probleme haben...


  • Mod

    @Jochen:
    UTF-8 und Datenbank... jo! Damit habe ich Probleme. Mehr als genug.

    Ein Client hat eine Englische Maschine, der nächste eine mit Ungarisch, und der nächste eine Türkische. Ale greifen auf die selbe DB zu (MS-SQL) und leider sind die DB-Felder text und nicht ntext...

    Ich würde es gar nicht erst probieren, wenn da irgendein ODBC oder OLEDB Treiber dazwiwschen liegt, grundsätzlich eine Konvertierung nochmal nach UNICODE und wieder zurück macht. Dann ist der UTF-8 hintennach nur noch Müll.



  • Wenn ich jetzt z.B. schreibe

    wchar_t *wch = L"ÄÖ";
    

    Kann ich dies dann über A2W in UTF-8 kodieren?

    Als ODBC Treiber benutze ich Oracle in OraHome92.
    Dieser wird sicher auch eine wichtige Rolle spielen, nehme ich an.



  • ItsMe84 schrieb:

    Wenn ich jetzt z.B. schreibe

    wchar_t *wch = L"ÄÖ";
    

    Kann ich dies dann über A2W in UTF-8 kodieren?

    Bestimmt nicht - A2W konvertiert einen Ansi-String (char*) in einen Wide-String (wchar_t*), aber nicht einen wchar_t* in (was-auch-immer).

    (allerdings bin ich nicht sicher, welches UTF-Format in der MFC verwendet wird)



  • Für UTF8, siehe
    WideCharToMultiByte

    Und als Anmerkung: Schreibe in Deinen Source-Code nie Zeichen > 127, da dies auf anderen Systemen nur zu missinterpretationen kommen kann.



  • Und als Anmerkung: Schreibe in Deinen Source-Code nie Zeichen > 127, da dies auf anderen Systemen nur zu missinterpretationen kommen kann.

    Hab ich auch nicht vor, das Ganze dient nur dem Testen ...



  • Habe den Zeichensatz meines Projektes auf Unicode umgestellt.

    Was bedeutet das jetzt genau? Habe ich nun nur die Dateien des Projektes umgestellt, oder die ganze Handhabung der Strings? 😕

    Drehe mich die ganze Zeit im Kreis 😞 ...



  • Wenn Du es in den Projekteinstellungen gemacht hast, dann die handhabnung der Strings.
    Also am besten ab sofort nur noch TCHAR und konsorten verwenden...



  • Weiß nicht, ob das jetzt noch hier hingehört aber ...

    Wenn ich z.B. einen russischen Text in einem CEdit-Feld ausgeben will, muss ich dafür doch den Font anpassen?



  • I.d.R. nicht, da der standard-Font auf passende Fonts gemappt wird. Du musst aber natürlich die Schriftarten für die entsprechenden Sprache installiert haben (was bei Russisch aber immer der Fall sein dürfte).



  • Ich würde niemanden zu MBCS raten... es nicht einmal erwähnen...

    Warum nicht?
    Habe gerade festgestellt, meine Projekte sind fast alle mit _MBCS übersetzt.
    Z.T sind gekaufte Dlls eingebunden.
    Muss demnächst in der Firma auf VS 2005 umstellen. Wie sieht das dann damit aus?

    Tester2



  • Mein Problem ist jetzt folgendes:

    Die Anwendung soll Unicode aufnehmen können und diesen an eine DB weitergeben. Die DB soll aber nicht auf Unicode umgestellt werden (läuft bereits beim Kunden).

    Das heißt ja, dass ich die Unicode-Texte in ANSI kodieren muss. Da ich aber den Zeichensatz des Projektes auf Unicode geändert habe, kann ich WideCharToMultiByte nicht mehr nutzen ...

    Stimmt das?



  • Dann versuch's doch mal mit dem Umwandlungsmakro T2CA() (oder T2A()), das sollte eigentlich funktionieren (und wandelt einen TCHAR* nach char* um).

    Edit: Und zum Rücklesen aus der DB nimmst du entsprechend A2T().



  • Danke schonmal ...

    Habe da aber immer noch ein Verständnisproblem ... wenn ich einen Unicode-Text in einen Ansi konvertiere, dann werden die Unicode-Zeichen, die in ANSI nicht vorhanden sind, durch beliebige anderen Zeichen ersetzt ...

    Dann kann die konvertieren von ANSI zu UNICODE doch nicht mehr vernünftig funktionnieren? Oder versteh ich etwas falsch?

    P.S.: schlagt mich ruhig, wenn es hilft ...



  • ItsMe84 schrieb:

    Habe da aber immer noch ein Verständnisproblem ... wenn ich einen Unicode-Text in einen Ansi konvertiere, dann werden die Unicode-Zeichen, die in ANSI nicht vorhanden sind, durch beliebige anderen Zeichen ersetzt ...

    Genau so ist es. Es ist zwar kein beliebigen Zeichen, sondern i.d.R. "?".

    ItsMe84 schrieb:

    Dann kann die konvertieren von ANSI zu UNICODE doch nicht mehr vernünftig funktionnieren? Oder versteh ich etwas falsch?

    Die Konvertierung funktioniert schon vernünftig. Nur ist das Ergebnis nicht mehr das, was Du ursprünglich gedacht hast...


Anmelden zum Antworten