Unicode Thematik - Projekt von MBCS zu Unicode importieren
-
Hallo zusammen,
wir hatten die ganzen Jahre bei uns eine Software im Einsatz welche nur im DE/AT Raum gelaufen ist.
Mittlerweile sind wir ebenfalls auf anderen Kontinenten vertreten und die Software läuft nicht mehr ganz wie gewünscht.Das kleine Tool läuft so das der Benutzer einen Pfad angibt. Anschließend wird in diesem Ordner nach allen Textdateien mittels Findfirstfile/Findnextfile gesucht.
Die Textdateien haben ein bestimmtes Format:Vorname|Nachname|BOD|Email
Die jeweiligen Daten werden "exportiert" und in eine result.csv geschrieben.
Jetzt habe ich im Projekt das folgende für die Umstellung beachtet:
- UNICODE und _UNICODE im Projekt gesetzt
- char/char* auf TCHAR/TCHAR* geändert
- LPSTR/LPCH durch LPTSTR/LPTCH ersetzt
- genereische Funktionsaufrufe werden verwendet. _tcslen anstatt strlen etc.
- Literale mit TEXT Makro umschlossen
- Zeigerarithmetik angepasstJetzt ist das Problem das die Textdateien auf einem anderem System z.B in China nicht geöffnet werden kann. bzw. die Daten nicht korrekt angezeigt werden.
Wenn ich die Datei öffne mittelsread = _wfopen(file,_T("rtS, ccs=UTF-8"));
Dann geht alles.
Scheinbar habe ich Unicode nicht ganz verstanden und mir stellt sich die Frage wie man mit Dateien nun korrekt umgeht ?
Muss vor dem Datei öffnen erst überprüft werden welcher Zeichensatz genutzt wird ?Hoffe auf ein paar verständliche Beiträge.
Viele Grüße
-
Da meine Frage scheinbar etwas unverständlich war, nochmal ein Anlauf.
Wie lese und verarbeite ich den eine Datei korrekt, unabhängig vom Zeichensatz ?
-
Wie lese und verarbeite ich den eine Datei korrekt, unabhängig vom Zeichensatz ?
Unmöglich.
Du musst wissen mit welchem Encoding die Datei geschrieben wurde um sie korrekt lesen zu können. Und du musst wissen in welchem Encoding ein anderes Programm die Datei erwartet um sie korrekt schreiben zu können.Wenn du dir das alles selbst aussuchen kannst, dann ist es natürlich eine gute Möglichkeit ein Encoding aus der UTF Familie zu verwenden - also z.B. UTF-8.
Je nachdem mit welchen anderen Programmen man die Dateien noch aufmachen möchte kann es auch hilfreich sein einen "Marker" in die Datei zu schreiben der angibt welches Encoding verwendet wurde.
Bei UTF Encodings kann man da z.B. einen sog. "BOM" schreiben. Dazu schreibt man als erstes Zeichen einfach das ZeichenU+FEFF
in die Datei -- in dem Encoding dass man halt verwendet.Wenn du aber Dateien hast die Codepage 1252 oder Codepage 1251 oder Codepage 1250 oder sonst eine Codepage als Encoding verwenden können, dann ist es schlicht und ergreifend nicht möglich automatisch zu erkennen welches das korrekte Encoding wäre. Also mit welcher Codepage die Datei "zu interpretieren" wäre.
So wie wenn ich dir sage: "172 - welches Zeichen meine ich?". Die Frage könntest du auch nicht beantworten ohne dass du wüsstest z.B. auf welche Tabelle ich mich beziehe.
R3bell schrieb:
Scheinbar habe ich Unicode nicht ganz verstanden und mir stellt sich die Frage wie man mit Dateien nun korrekt umgeht ?
Jo, vermutlich. Die Projekteinstellung UNICODE hat mit Files oder IO im Allgemeinen reichlich wenig bis gar nichts zu tun.
Wenn du z.B. UTF-8 Files schreiben und/oder lesen willst, dann musst du deinen Code dafür entsprechend anpassen.