![]() |
Delphi und PHP: JSON und deutsche Umlaute
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:
Hier wird z.B. aus einem ü ein ü und aus ß ein ß
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; Mein PHP-Skript sieht folgendermaßen aus und gibt die Daten mit den fehlerhaften Umlauten aus.
Code:
Also dachte ich, dass ich dem
<?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 } ?>
Delphi-Quellcode:
die Codierung angebe.
StreamWriter := TStreamWriter.Create(FileStream, TEncoding.UTF8);
Jetzt werden zwar die deutschen Umlaute korrekt gespeichert, das Skript steigt aber bei
Code:
aus.
output('$json_a === null');
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. |
AW: Delphi und PHP: JSON und deutsche Umlaute
Kann es sein, dass PHP die Datei als UTF8 ohne BOM erwartet?
|
AW: Delphi und PHP: JSON und deutsche Umlaute
Danke für den Hinweis!
Mit
Code:
vor dem
$string = ltrim($string, chr(239).chr(187).chr(191));
Code:
funktioniert es.
json_decode()
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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-2025 by Thomas Breitkreuz