![]() |
Umlaute nach laden von Textdatei kaputt (Encodingprobleme)
Moin,
ich hab hier momentan ein sehr merkwürdiges Problem. Und zwar habe ich eine API geschrieben, über welche Base64-codierte Dateien anhand eines JSON-Strings übergeben werden können. Diese Speichere ich dann ganz normal im Dateisystem.
Delphi-Quellcode:
Wenn ich mir die Datei im Windows Editor oder in Notepad++ anschaue, wird mir als Encoding UTF-8 angezeigt. Sowohl im Editor als auch in Notepad++ sind die Umlaute heile.
mStream := TBytesStream.Create(TBase64Encoding.Base64.DecodeStringToBytes(mRechnung.Edifakt));
try mTempDir := TIniManager.GetIniString('Default', 'TempDir'); if not DirectoryExists(mTempDir + aMandantid) then begin ForceDirectories(mTempDir + aMandantid); end; mStream.SaveToFile(mTempDir + aMandantid + '\' + mRechnung.FileName); Wenn ich diese Datei (es ist immer eine Textdatei) nun versuche in eine StringList zu laden, dann sind die Umlaute plötzlich kaputt.
Delphi-Quellcode:
Hat vielleicht jemand eine Idee was ich da falsch gemacht habe?
mStringList.LoadFromFile('Pfad zur Datei', TEncoding.UTF8);
Vielen Dank schon einmal im Voraus. Viele Grüße Maliko |
AW: Umlaute nach laden von Textdatei kaputt (Encodingprobleme)
Hi Maliko,
da würde ich im ersten Schritt schauen, was für Bytes jetzt tatsächlich in der Datei stehen. Außerdem ist sicher die Frage interessant: Gibt es ein Byte Order Mark? Als zweites würde ich schauen, wie die Daten in der Quelle stehen, oder hast du nur die Base64-Daten. Wenn ich mich nicht total täusche, sieht das vom Ablauf her aber richtig aus, so dass der ursprüngliche Text, welcher Base64-Codiert wurde, tatsächlich dem Ergebnis in der Datei entspricht (auf Byteebene). Vielleicht kann dir nach der Beantwortung dieser Fragen jemand einen Tipp geben. Wie gesagt, ich selbst sehe erstmal keinen Fehler. Mit freundlichem Gruß Incocnito |
AW: Umlaute nach laden von Textdatei kaputt (Encodingprobleme)
Betrifft das große und kleine Umlaute? In Delphi 2009 hatte ich z.B. Probleme mit Umlauten, allerdings nur mit den Großbuchstaben und nur bei UTF8Decode und nicht bei LoadFromStream/File.
Zitat:
Zitat:
|
AW: Umlaute nach laden von Textdatei kaputt (Encodingprobleme)
Wie ist den mRechnung.Edifakt entstanden.
War das ursprünglich wirklich ein UTF8-string der in BASE64 umgewandelt wurde oder vieleicht doch nur ein ANSI-string? Lass das Encoding beim Laden der Stringliste doch mal weg. |
AW: Umlaute nach laden von Textdatei kaputt (Encodingprobleme)
Vielleicht so?
Delphi-Quellcode:
bytes: TBytesStream;
mStream := TBytesStream.Create(TBase64Encoding.Base64.DecodeStringToBytes(mRechnung.Edifakt)); try mTempDir := TIniManager.GetIniString('Default', 'TempDir'); if not DirectoryExists(mTempDir + aMandantid) then begin ForceDirectories(mTempDir + aMandantid); end; TEncoding.GetBufferEncoding(mStream.Bytes, curEncoding); if curEncoding <> TEncoding.UTF8 then begin bytes := TEncoding.Convert(curEncoding, TEncoding.UTF8, mStream.Bytes); mStream.Free; mStream := TBytesStream.Create(bytes); end; mStream.SaveToFile(mTempDir + aMandantid + '\' + mRechnung.FileName); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz