Hallo,
ich möchte in Delphi eine JSON-Datei erstellen und diese dann von php auslesen lassen.
Mein Problem ist, dass entweder die deutschen Umlaute nicht korrekt geschrieben werden, oder php die UTF8-kodierte Datei nicht lesen möchte.
Hier sind meine Quelltexte:
Delphi-Quellcode:
function ExportJSONData : Boolean;
var
Writer: TJsonTextWriter;
FileStream: TFileStream;
StreamWriter: TStreamWriter;
i: Integer;
JsonFilename: string;
const
cJSONFilename = "FSOExport.json";
begin
log.d('ExportJSONData');
Result := true;
JsonFilename := System.IOUtils.TPath.Combine(System.SysUtils.IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetSharedDocumentsPath), cJSONFilename);
log.d(JsonFilename);
FileStream := TFileStream.Create(JsonFilename, fmCreate);
StreamWriter := TStreamWriter.Create(FileStream); //, TEncoding.UTF8);
Writer := TJSONTextWriter.Create(StreamWriter);
try // finally
Writer.Formatting := TJSONFormatting.Indented;
try //except
Writer.WriteStartObject;
Writer.WritePropertyName('section');
Writer.WriteStartArray;
for i := 0 to EntryList.Count - 1 do
begin
Writer.WriteStartObject;
Writer.WritePropertyName('name');
Writer.WriteValue(TMyEntry(EntryList.Items[i]).Name);
// ....
Writer.WritePropertyName('notes');
Writer.WriteValue(TMyEntry(EntryList.Items[i]).Notes);
Writer.WriteEndObject;
end;
Writer.WriteEndArray;
Writer.WriteEndObject;
except
Result := false;
end;
finally
FileStream.Free;
StreamWriter.Free;
Writer.Free;
end;
end;
Hier wird z.B. aus einem ü ein ü und aus ß ein ß
Mein PHP-Skript sieht folgendermaßen aus und gibt die Daten mit den fehlerhaften Umlauten aus.
Code:
<?php
function output($string){
echo '<p>' . $string;
}
if (!file_exists("FSOExport.json")) {
output('Die JSON Datei existiert nicht...');
exit;
}
$string = file_get_contents("FSOExport.json");
if ($string === false) {
output('$string === false');
exit;
}
$json_a = json_decode($string, true);
if ($json_a === null) {
output('$json_a === null');
exit;
}
foreach ($json_a as $section => $section_arr) {
// ... Ausgabe der Daten
}
?>
Also dachte ich, dass ich dem
StreamWriter := TStreamWriter.Create(FileStream, TEncoding.UTF8);
die Codierung angebe.
Jetzt werden zwar die deutschen Umlaute korrekt gespeichert, das Skript steigt aber bei
Code:
output('$json_a === null');
aus.
Ich habe auch schon diverse PHP-Funktionen zur Konvertierung verwendet, aber irgendwie scheint nichts zu helfen.
Kann mir jemand helfen, der das Problem gelöst hat? Vielen Dank.