Entwickler-Ecke

Internet / Netzwerk - Problem Zeichenkodierung


ChrisCross - Di 22.12.15 14: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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 22.12.2015 um 14:44


Holgerx - Di 22.12.15 17: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 user profile iconMartok: Delphi-Tags hinzugefügt


ChrisCross - Sa 26.12.15 11: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 20: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...