AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TJson.Format und Umlaute
Thema durchsuchen
Ansicht
Themen-Optionen

TJson.Format und Umlaute

Ein Thema von Codehunter · begonnen am 2. Sep 2019 · letzter Beitrag vom 2. Sep 2019
Antwort Antwort
Schokohase
(Gast)

n/a Beiträge
 
#1

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 11:41
Zur Ausgangsfrage zurück:
Aber wie bekomme ich ein korrekt UTF8-kodiertes und formatiertes JSON zusammen?
ganz einfach mit
Delphi-Quellcode:

procedure p();
var
   jsonObject: TJSONObject;
begin
   jsonObject := TJsonObject.Create();
   jsonObject.AddPair('text', 'Straße');

   Writeln( jsonObject.ToString() ); // unformatiert
   WriteLn( Rest.Json.TJson.Format(jsonObject) ); // formatiert
end;
ergibt
Code:
{"text":"Straße"}
{
  "text":"Straße"
}
Um davon jetzt eine UTF8 kodierte Bytefolge zu erhalten nimmt man z.B. TEncoding.UTF8.GetBytes( json ); .
Wenn man etwas mit Indy verschicken will, dann reicht es in der Regel den String zu verwenden und die entsprechend gewünschte Kodierung anzugeben. Das Umwandeln von dem String in die Kodierung übernehmen dann eigentlich die Indy-Komponenten.

Nur so nebenbei erwähnt:

Das Ergebnis
Code:
{"text":"Stra\u00DFe"}
wird ja auch in einem Delphi-Unicode zurückgegeben. Ist also auch nicht UTF8 oder was auch immer vermutet.

Geändert von Schokohase ( 2. Sep 2019 um 11:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 13:10
Der Unterschied sind die intern verwendeten Methoden. Während ToString und Format auf ToChars zurückgreifen, macht ToJSON Gebrauch von ToBytes. Bei einem TJSONString ist ToBytes aber so implementiert, daß es alle Zeichen > #128 (und auch ein paar < #32) als /u escaped darstellt. Das ToChars beschränkt sich da lediglich auf ein paar spezielle Zeichen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#3

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 13:36
Der Unterschied sind die intern verwendeten Methoden. Während ToString und Format auf ToChars zurückgreifen, macht ToJSON Gebrauch von ToBytes. Bei einem TJSONString ist ToBytes aber so implementiert, daß es alle Zeichen > #128 (und auch ein paar < #32) als /u escaped darstellt. Das ToChars beschränkt sich da lediglich auf ein paar spezielle Zeichen.
Jepp so seh ich das auch. Nur unglücklicherweise mag der Server keine unmaskierten Umlaute und (warum auch immer) kein unformatiertes Json. Heißt, ich muss meinen Request dem nicht standardkonformen Server bekömmlich vorverdauen. Also mit Zeilenumbrüchen, Indentations und \u-escaped Umlaute.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#4

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 13:59
Nur unglücklicherweise mag der Server keine unmaskierten Umlaute und (warum auch immer) kein unformatiertes Json.
Das ist allerdings schon recht ungewöhnlich, was eine fertige Implementierung für diesen Fall doch eher unwahrscheinlich macht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#5

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 15:48
Aus meiner Perspektive sind solche Extrawürste leider eher der Normalzustand. Wenn ich mal Glück habe dann habe ich es mit dem IIS zu tun. Aber auffallend oft habe ich solche Exoten, wenn sie auf Nginx laufen. Scheinbar gibt es da ein paar sehr freakige Frameworks. Inzwischen habe ich rausgefunden, dass der Request nicht komplett formatiert sein muss, es genügt ein einzelnes Linefeed ($10) am Ende. Ohne dieses bekomme ich immer 400er Fehler.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.682 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 16:10
Ein Grund, warum ich zu XML zurück gewechselt bin.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#7

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 16:13
Nö, Json hat schon viele Vorteile. Allein der viel kleinere Footprint. Aber letztlich nicht meine Entscheidung.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 16:33
Ein Grund, warum ich zu XML zurück gewechselt bin.
Na ja, wenn du einen REST-Service bedienen sollst, der dir das Format vorgibt, hast du eben nicht die Wahl.

Abgesehen davon gibt es sicher auch Server mit schlechten XML-Implementierungen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#9

AW: TJson.Format und Umlaute

  Alt 2. Sep 2019, 16:46
Inzwischen habe ich rausgefunden, dass der Request nicht komplett formatiert sein muss, es genügt ein einzelnes Linefeed ($10) am Ende. Ohne dieses bekomme ich immer 400er Fehler.
Das klingt alles sehr seltsam.

Könntest du mit dem Telerik Fiddler einmal den HTTP-Request aufzeichnen, anonymisieren und hier reinstellen?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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