qt + codierungen
-
QString ist übrigens ein Array aus QChar, welches jeweils 16 bit groß ist. Intern wird also UTF-16 benutzt. Wenn du wirklich die Daten als UTF8 speichern willst, so kannst du .toUtf8() nutzen. Empfehl ich dir aber nicht, benutz lieber die bereits serialisierten Streams von Qt.
-
Ich hatte dieses verdammt Problem schonmal und habs bisher noch nie kapiert, ich zeig euch mal den Code:
#include <QtCore/QCoreApplication> #include <QDir> #include <QTextStream> int main() { QFile x("/home/anubis/test.txt"); x.open( QIODevice::ReadWrite); QString s("Hällo"); QTextStream out(&x); out.setCodec("UTF-8"); out << s; return 0; }
Wenn ich das so verwende wird der String anscheinend doppelt als UTF-8 interpretiert und ich bekomme ne seltsame Ausgabe.
Ich frag einfach mal grad heraus: wie mache ich es richtig wenn ich als ergebnis unbedingt (systemunabhängig) utf-8 haben möchte?
-
Warum willst du denn unbedingt in UTF-8 schreiben? Du machst es dir dadurch nur schwerer den Text in Qt wieder einzulesen.
Richtig wäre in diesem Fall QString::toUtf8(). Allerdings wird dann auch der Qt-Kram von QByteArray mitgeschriebne. Wenn du das auch nicht willst, dann musst du auf die Daten vom ByteArray direkt zugreifen und diese schreiben.
-
kannst du mal einen kompletten code posten wobei Hällo als utf-8 gespeichert wird?
Egal was ich mache ich bekomme nur Schrott raus.
Doppelt oder gar dreifach als UTF-8 interpretierter String... HILFE !(UTF-8 ist wichtig, da Teile der Datei XML sind, die wiederum von TinyXML ausgelesen werden sollen, welches darauf ausgerichtet ist UTF-8 einzulesen, also im Grunde wird die Datei ein Format zum Speichern)
-
Bin mir jetzt nicht sicher und habe hier kein Qt zum testen, aber es sollte so möglich sein:
QString string("Hallo"); QTextStream stream(&file); stream << string.toUtf8().data();
-
Für sowas hat man doch immer seine Qt-Sourcen auf der Platte liegen.
Look at
<qt-src>/src/corelib/xml/qxmlstream.cpp
Brav nach QXmlStreamWriter suchen (info: auch QXmlStreamWriterPrivate ist interessant ;))
-
das bringt mich noch um den verstand:
#include <QtCore/QCoreApplication> #include <QDir> #include <QTextStream> int main() { QFile x("/home/anubis/test.txt"); x.open( QIODevice::ReadWrite); QString s("Hällo"); QTextStream out(&x); out << s.toUtf8().data(); return 0; }
Ausgabe:
Hällo
Also wieder doppelt utf-8 interpretiert.
Wieso geht das nicht so einfach wie in java?
Falsche Frage, wie gehts richtig?
-
shisha schrieb:
Ausgabe:
Hällo
Also wieder doppelt utf-8 interpretiert.
Wieso geht das nicht so einfach wie in java?
Falsche Frage, wie gehts richtig?Du weißt, dass ein "ä" in UTF-8 zwei Bytes lang ist, oder? Also alles vollkommen richtig..
-
nicht richtig wenn man einen utf-8 editor verwendet
Und um sicher zu gehen:
C3 83 C2 A4
Das ist nicht das erwartete C3 A4 für ein ä und immerhin 4 Byte.
Diese Zeichenkette entsteht wie mir zwutz hier mal erklärt hat wenn man 2-mal UTF anwendet.Aber ich habe immer noch keine Lösung für dieses Problem (nächster Schritt wäre dann noch Verstehen )
-
kann mir jemand helfen?
am besten mit mustercode
-
shisha schrieb:
kann mir jemand helfen?
am besten mit mustercodehttp://www.c-plusplus.net/forum/viewtopic-var-p-is-1874520.html#1874520
-
hmm?
alles was ich da probiert habe funktioniert nicht so wie ich es will
mit codec for locale klappts zwar aber ich weiß nicht wie es damit unter windosh aussehen würde