Outputstream Encoding



  • Danke schon mal für eure Antworten 🙂
    Die Daten liegen schon in UTF8 vor, die ich in den Outputstream jagen möchte. Von Daher habe ich gedacht, kann ich die Daten gleich mit dem ofstream rausschreiben. Nur ist dann am Ende das Encoding nicht UTF8 sondern ISO-...
    Gibt es also auf diesem Wege keine Möglichkeit, ohne wofstream usw., die Dateien in eine UTF-8-Datei zu schreiben?



  • Hallo,

    fehlt evtl. einfach das UTF8-BOM am Anfang der Datei: http://de.wikipedia.org/wiki/Byte_Order_Mark ?



  • Für UTF8 ist eine byte order mark sehr sehr ungewöhnlich, weil sie völlig unnötig ist. So ungewöhnlich, dass man fast davon ausgehen kann, dass die früher oder später zu Problemen führen wird (ich spreche aus leidiger Erfahrung).


  • Mod

    Mal 'ne dumme Frage: Wie stellst du fest, welches Format das Ergebnis hat? Eigentlich sollte das nämlich funktionieren, wenn das Ausgangsmaterial schon UTF-8 ist, selbst (oder gerade) wenn man einfach gar nichts macht. Das schöne an UTF-8 ist ja gerade, dass es selbst für das älteste, dümmste Programm (z.B. ein Compiler oder die C++-Standardlib 😉 ) wie eine Folge von einfachen 8-Bit-Zeichen aussieht. Da müsste schon irgendwo eine aktive Konvertierung stattfinden und ich sehe gerade nicht, wo dies der Fall sein sollte. Außer du machst vielleicht beim Speichern des Quellmaterials schon etwas falsch, so dass dieses gar als UTF-8 vorliegt.



  • Ich bekomme die Daten aus einer UTF-8 kodierten Postgres-Datenbank.
    Daher gehe ich davon aus, dass das Ergebnis auch in UTF-8 vorliegt?!

    Das BOM muss ich also nicht unbdedingt setzen?



  • sgealexmeier14 schrieb:

    Das BOM muss ich also nicht unbdedingt setzen?

    Genau. Die darfst du bei UTF8 sogar garnicht setzen, außer du willst Probleme heraufbeschwören.



  • Ok das ist schon mal gut zu Wissen.

    Mein Problem ist leider immer noch nicht gelöst.
    Ich habe leider auch zu wenig Erfahrung darin und muss mir das ganze Themengebiet überall zusammensuchen.

    Ich habe mal weitere Versuche gemacht, wie z.B. das hier:
    <mein ofstream>.imbue (std::locale (std::locale ("de_DE.UTF-8"), new codecvt_byname<wchar_t, char, mbstate_t> ("UTF-8")));

    Die Ausgabedatei erfolgt leider immer noch als ISO-Encoding.


  • Mod

    Mach einfach gar nix.



  • wie meinst du das?


  • Mod

    sgealexmeier14 schrieb:

    wie meinst du das?

    Leite die Eingabe einfach durch, ohne irgendwelche locales oder so.



  • Aber dann ist es ja auch ISO und nicht UTF8 😞



  • sgealexmeier14 schrieb:

    Aber dann ist es ja auch ISO und nicht UTF8 😞

    Edit: Ich konnte es endlich lösen. Ich habe überall rumgesucht, nur nicht da, wo ich mir eigentlich sicher war, das es passt. Wie ihr schon mal gesagt hattet, lagen meine Daten nicht in UTF8 vor. Ich musste obwohl es eine UTF8-DB war, das Encoding ändern, da Standardmäßig ISO verwendet wird.

    Es tut mir leid, dass Ihr mir wegen sowas helfen musstet. 🙂
    Aber ich bedanke mich bei der schnellen Hilfe!

    Vielen Dank und Viele Grüße


Anmelden zum Antworten