Thread JSON und utf8 (25 answers)
Opened by rosti at 2018-05-06 18:58

rosti
 2023-05-14 14:47
#194876 #194876
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
Um das Problem mal beim richtigen Namen zu nennen: JSON.pm erwartet per Default, daß für alle Strings die Kodierung eingeschaltet ist.

Code (perl): (dl )
1
2
3
4
5
6
7
use strict;
use warnings;
use JSON; 
# Bytes für das € Zeichen
# UTF-8
my $h = { euro => pack("CCC", 226, 130, 172)};
print encode_json($h); # Müll


Und so entsteht der Müll eben aufgrund dieser Erwartungshaltung, weil JSON.pm ein encode macht, also die Kodierung abschaltet.

Wenn ich mit obenstehender Hashref notiere: print to_json( $h, { utf8 => 0 } ); ist die Ausgabe korrekt aber der Code ist eben verwirrend um nicht zu sagen blödsinnig. Denn übergeben wurden ja ganz sicher die richtigen Bytes für ein utf-8-kodiertes Eurozeichen. utf8 => 0 => WTF.

Wenn man also korrekt sein will und gleichermaßen einen verständlichen Code schreiben soll, müsste man für sämtliche Strings die an JSON übergeben werden die Kodierung einschalten. Ob das bei Datenstrukturen die mehrere tausend einzelne Strings beinhalten sinnvoll ist, sei mal dahingestellt ;)

Mehr zu diesem Thema: http://rolfrost.de/bchar.html

Schönen Sonntag!

PS: Dieser Mangel haftet allen Serialize-Algorithmen an die zeichenorientiert arbeiten!
Last edited: 2023-05-14 16:01:47 +0200 (CEST)

View full thread JSON und utf8