Autor Beitrag
ChrisCross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: Di 22.12.15 14:41 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55
Erhaltene Danke: 22

Win95 - Win8.1 / MSServer2000 - MSServer2012
Delphi 6pro / XE4
BeitragVerfasst: Di 22.12.15 17:32 
Hmm..

Datei per z.B. TStringList laden und dann
mit

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55
Erhaltene Danke: 22

Win95 - Win8.1 / MSServer2000 - MSServer2012
Delphi 6pro / XE4
BeitragVerfasst: Sa 26.12.15 20:17 
Oder mit

ausblenden 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...