Sonderzeichen gehen beim Einlesen einer Datei verloren



  • Hallo Leute,

    ich habe hier ein kleines Problem:
    Ich habe eine text-datei die jede Menge verschiedene Sonderzeichen enthält. Will ich diese Datei nun einlesen werden diese jedoch immer durch unübersichtlichen "Krimskrams" ersetzt.

    Nun bin ich auf der Suche nach einer Lösung mit der ich die Text-Datei in einen beliebigen Unicode-String bekomme.

    Damit hole ich mir bis jetzt den Dateiinhalt in die Variable "content", jedoch aber ohne Sonderzeichen.

    string buff, content;
    ifstream myfile("test.txt");
    if(myfile.is_open())
    {
    	while(!myfile.eof())
    	{
    		getline(myfile, buff);
    		content = content + buff;
    	}
    }
    

    Was muss ich ändern/hinzufügen?

    /edit: nach genauerem hinsehen ist mir nun aufgefallen, dass scheinbar schon mit der Datei etwas nicht stimmt:

    (web ist ein TIdHTTP-Element)

    TFileStream *fs = new TFileStream("test.txt", fmCreate);
    Form1->web->Get("http://meinserver.de/test.txt", fs);
    delete fs;
    

    Damit lade ich also die Datei hinunter. Öffne ich sie nun im System mit dem Editor werden alle Zeichen korrekt angezeigt (Zeichensatz ist UTF-8). Öffne ich dieselbe Datei jedoch im WordPad sind die Sonderzeichen wieder "Krimskrams".

    Die Lösung habe ich immer noch nicht 😕



  • Hallo

    std::string ist nicht für Unicode-zeichen geeignet, genausowenig wie ifstream.
    Nimm UnicodeString aus der VCL (sollte ab Studio 2009 sowieso automatisch anstelle von AnsiString verwendet werden) oder std::wstring samt wfstream (wobei ich nicht genau weiß ob und wie ein w-stream im Builder bereits definiert ist)

    bis bald
    akari



  • ich habe inzwischen die wildesten kombinationen ausprobiert darunter auch wfstream und wstring. Aber immer kam dasselbe raus oder eben ein Error.

    Ich denke ich habe jetzt auch die Fehlerquelle:

    Lade ich die Datei über die Indy-Komponente direkt in einen UnicodeString via

    String file = Form1->web->Get("http://meinserver.de/test.txt");
    

    und lasse diese dann anzeigen sind die Sonderzeichen bereits kaputt. Öffne ich dagegen die Textdatei im Browser oder lade sie hinunter und öffne sie dann im Editor werden alle Zeichen korrekt dargestellt.
    Wenn ich die heruntergeladene Datei aber im WordPad öffne sind die Sonderzeichen aber wieder falsch dargestellt, ohne, dass ich etwas an der Datei geändert habe.

    Das bedeutet, denke ich mal, dass etwas mit der Textdatei nicht stimmt, oder?



  • probier mal das hier:

    TStringList *Data = new TStringList;
    Data->LoadFromFile("test.txt");
    

    und schau dir mal die Strings an

    grüssle 🙂



  • Hallo,

    Wenn die Datei UTF8 ist musst du sie mit normalen Strings einlesen und dann konvertieren. Z.Bsp. damit:
    http://utfcpp.sourceforge.net/
    In der VCL gibt es auch noch das hier

    UTF8Decode
    


  • Habe nun eine Lösung gefunden:

    Unter den Seiteninformationen der Textdatei konnte ich als Kodierung ISO-8859-1 einsehen. Ich gehe mal davon aus, da ich selbst keine Ahnung von Zeichensätzen habe, dass diese Sonderzeichen nicht unterstützt (aber scheinbar trotzdem welche beinhalten kann).

    Form1->web->Response->CharSet = "UTF-8";
    String page = Form1->web->Get("http://meinserver.de/test.txt");
    

    Und schon enthält der String die Sonderzeichen so, wie sie sein sollen 🙂

    Danke für eure Hilfe 🙂


Anmelden zum Antworten