Komische Zeichen beim Einlesen von einer Datei in ein String
-
Hallo zusammen,
wenn ich auf die Art und Weise eine Datei in ein String einlese wie es unten im Coding zu sehen ist, sind im string an den ersten 3 Stellen komische Zeichen drin und zwar diese hier: ï » ¿ .Außerdem habe ich an den Stellen wo es leerzeichen sind diese Zeichen #
Hat einer eine Idee was daran falsch ist?

Hier mein Coding:
string readFileToString(string path) { ifstream file(path.c_str()); if (file.is_open()) { stringbuf buffer; if (file >> &buffer) { return buffer.str(); } else { cout << "IO-Fehler"; return ""; } } else { cout << "Datei existiert nicht oder kein Zugriff möglich \n"; return ""; } }
-
edit: Vergiss was hier stand. Du hast ja einen stringbuf statt einem string genommen. Da muss ich erst einmal nachdenken:
a) Was du dir dabei gedacht hast
b) Was genau hier schiefgeht (es ist mir im Moment unklar, was überhaupt schiefgeht)
c) Wie man diesen Ansatz korrigiert
d) Ein Beispiel, wie es besser geht
-
Damit du meine edits auch siehst, pushe ich den Thread mal mit Neuigkeiten zu Punkt b:
Ich kann dein Problem nicht nachvollziehen. Somit entfallen die Punkte c und d. Siehe Punkt 3 in meiner Signatur, wie du uns trotzdem helfen kannst, dir zu helfen.Jedenfalls:
http://ideone.com/sEmFp6
-
das
ist ein BOM, Du hast da also utf8-Daten.
Das mit der#sagt mir erstmal nichts...
-
SeppJ schrieb:
Ich kann dein Problem nicht nachvollziehen. Somit entfallen die Punkte c und d. Siehe Punkt 3 in meiner Signatur, wie du uns trotzdem helfen kannst, dir zu
Das Problem wie oben beschrieben liegt daran das wenn ich eine Datei einlese z.B. XML-Datei oder TXT-Datei, steht dann im String der richtige Inhalt der eingelesenen Datei.
Allerdings stehen am Anfang des Strings diese 3 Zeichen, die in der eingelesenen Datei nicht vorhanden sind. Das ist für die Weiterverarbeitung des Strings nicht erwünscht.
Liegt der Fehler an der Art wie ich eine Datei einlese z.B. etwas in meinem Coding stimmt nicht? Oder muss man beim Einlesen irgendwas beachten z.B. Code-Page, Unicode usw.? Oder irgendetwas anderes?
-
Caligulaminus schrieb:
das
ist ein BOM, Du hast da also utf8-Daten.
Das mit der#sagt mir erstmal nichts...Vielen Dank an Caligulaminus das hilft mir schon mal weiter. Aber wie bekomme ich das weg? Das Zielsystem wohin der String übergeben wird schmeißt eine Exception wenn diese BOM am Anfang steht.
-
C++ kann das nicht von Haus aus. Frag mich nicht warum.
http://utfcpp.sourceforge.net/
-
Ich lesen in einem solchen Fall binär ein und verwerfe den BOM. Man muss dabei auch erstmal prüfen was für ein BOM das ist um die Anzahl der zu verwerfenden Zeichen festzustellen.
-