Entwickler-Ecke
Internet / Netzwerk - Problem Zeichenkodierung
ChrisCross - Di 22.12.15 13:41
Titel: Problem Zeichenkodierung
Hallo,
ich habe ein Problem mit der Zeichenkodierung einer Datei. Ich lade eine Datei, die im Format ISO 8859-1 kodiert ist in einen TIdMultiPartFormDataStream:
Delphi-Quelltext
1: 2:
| data.AddFormField('text', 'heute'); data.AddFile('datei', Pfad, 'application'); |
und schicke die per HTTP Post an eine PHP Datei auf dem Server.
Auf dem Server wird dann die Datei entgegengenommen und abgelegt, der String wird verarbeitet. Mein Problem ist nun, dass die Datei später in eine Datei mit der Kodierung UTF-8 per include eingefügt wird. Da die Datei aber im Format ISO 8859-1 vorliegt, werden alle Umlaute als solchen unschönen Zeichen dargestellt: �
Gibt es eine Möglichkeit die Datei, ohne sie als Zwischenschritt neu abzuspeichern, in UTF-8 umzuwandeln und dann als TIdMultiPartFormDataStream an den Server zu schicken?
Christoph
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Di 22.12.2015 um 14:44
Holgerx - Di 22.12.15 16:32
Hmm..
Datei per z.B. TStringList laden und dann
mit
Delphi-Quelltext
1: 2:
| function Utf8Encode(const WS: WideString): UTF8String; function AnsiToUtf8(const S: string): UTF8String; |
nach UTF8 convertieren.
Anschließend diesen Sting in den Anhang und durch das PHP-Script als File speichern..
(Nur so ne Idee.. ;) )
Moderiert von Martok: Delphi-Tags hinzugefügt
ChrisCross - Sa 26.12.15 10:19
Danke für die Idee,
leider hat die HTML Datei sehr lange Zeilen mit vielen Zeichen und TStringList bricht diese beim Einlesen mit einem = Zeichen um, was natürlich nicht sonderlich schön in einer HTML Datei ist. Das stellt also noch ein Problem dar.
Ich hab jetzt erstmal als (Not)Lösung gewählt, dass eine neue temporäre Datei erstellt wird, die als UTF 8 gespeichert wird und diese wird hochgeladen und danach wieder gelöscht.
Christoph
Holgerx - Sa 26.12.15 19:17
Oder mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function LoadFileToStr(const FileName: TFileName): AnsiString; var FileStream : TFileStream; begin FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try if FileStream.Size>0 then begin SetLength(Result, FileStream.Size); FileStream.Read(Pointer(Result)^, FileStream.Size); end; finally FileStream.Free; end; end; |
direkt in einen Ansi-String landen und dann mit
function AnsiToUtf8(const S: string): UTF8String;
konvertieren...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!