CStdioFile.ReadString eine Unicode Datei einlesen
-
Hallo geehrte Community,
mal wieder stehe ich auf dem Schlauch.
Ich lese eine txt-Datei zeilenweise mitCString tempString; CStdioFile tempFile; tempFile.ReadString(tempString);
ein. Es funktioniert wunderbar, solange ich die datei nicht als Unicode gespeichert habe (Wordpad speichern als Unicode). Dann liest er mir ein Paar Sonderzeichen ein (ich nehme an die Unicode-Codierung der Datei). Danach will er keine weitere Zeile einlesen.
Hat jemand eine Idee? An sich ist ja CString via Definition Unicode kompatibel, oder?
Vielen Dank im Voraus für Eure Mühe.
-
Sexymaxy schrieb:
Hat jemand eine Idee? An sich ist ja CString via Definition Unicode kompatibel, oder?
Afaik mußt du in den Projektoptionen selber einstellen, ob CString und Kollegen mit UNICODE arbeiten oder nicht.
-
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D [b]"_UNICODE"[/b] /D [b]"UNICODE"[/b] /D "_AFXDLL" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug\Test2.pch" /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /ZI /TP /analyze /errorReport:prompt
Somit eigentlich geschehen, oder?
-
Zeichensatz -> Unicode-Zeichensatz verwenden
C/C++ -> Allgemein -> Unicode-Antwortdateien verwenden -> ja#ifdef _DEBUG #define new DEBUG_NEW #endif #ifndef _UNICODE #define _UNICODE #endif
Das habe ich alles getan. Falls das weiterhilft
-
gerade fuer unicode wuerde ich CFile bevorzugen
std::ifstream file(filename, std::ios_base::binary);
-
Ist CStdioFile nicht abgeleitet von CFile? Bei CFile kann ich dann nicht so elegant zeilenweise einlesen, oder?
-
wozu zeilenweise einlesen wenn du alles schoen innen vector packen kannst #gg
std::vector<byte>vContent std::ifstream file(FileName, std::ios_base::binary); if(!file.is_open()) return ERR_OPEN; std::copy(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), std::back_inserter(vContent)); file.close();
{koenntest ja auch ne schleife machen wo du alles kopierst bis ein \n auftaucht wenn du nur die erste zeile auslesen magst}
-
Das hatten wir aber schon mal abgehackt
-
in dem task war das problem mit den datei namen, das ist aber hier doch nicht mehr das problem oder ?
binaeres auslesen mach ich schon immer so und hatte noch nie probleme {o;
-
Nein da habe ich auch keine Unicode-Zeichen in die Datei geschrieben bekommen
-
Wurde das Problem schon gelöst?
Wenn ich mich noch recht erinnere war CStdioFile nicht Unicodefähig. Auf der Seite www.codeproject.com kannst du mal nach CStdioFileEx suchen, diese Klasse unterstützt Unicode.
-
Vielen Dank, daran scheints tatsächlich zu liegen. Es ist nur ne ganze Menge Code. Leider würde das bei mir (noch) lange dauern, bis ich da durchgestiegen bin, um das nötige für mich zu extraihiren. Kann CFile Unicode? Oder komme ich nicht drum herum Codepage auszulesen und die ersten Bytes der Dateien usw.?
Danke sehr nochmal
-
Nimm doch einfach die fertige Klasse von http://www.codeproject.com/file/stdiofileex.asp
Mit dieser kannst du dann arbeiten wie mit CStdioFile.
-
Genau das möchte ich vermeiden. (Lerneffekt ist zu niedrig :D) Auch wenns läger dauert möchte ich schon den Code nachvollziehen können, den ich abliefere.
Ich habe aber da was ganz einfaches gefunden:
http://www.codeproject.com/file/ANSI-UNICODE_conversion.aspDamit dürfte das gehen, oder?
-
Ja, aus dem Artikel kannst du einiges lernen und für dein Problem umsetzen.