Thread Apache error log erweitern (55 answers)
Opened by ALE1981 at 2019-09-20 11:41

haj
 2019-09-23 15:29
#190534 #190534
User since
2015-01-07
527 Artikel
BenutzerIn

user image
2019-09-23T09:51:25 rosti
Code (perl): (dl )
print JSON::encode_json( {amt => '3€'}  );


Gibt bei mir eine falsche Bytesequenz aus. Guck mal was Deine Version macht.

Das liegt daran, dass Du den Literal '3€' verwendest, ohne mit use utf8; zu deklarieren, dass Deine Quelldatei in UTF-8 codiert ist. Perl interpretiert das Euro-Zeichen als drei Bytes, und diese "siehst" Du dann im JSON-String. Eins sieht man nicht, weil eines der drei Bytes der Euro-Codierung ein Kontrollzeichen ist.
Zum Vergleich, verwendbar in einem UTF-8-Terminal:

Code: (dl )
1
2
perl -MJSON -e "print JSON::encode_json( {amt => '3€'}  );"
# {"amt":"3â¬"}


Code: (dl )
1
2
perl -MJSON -Mutf8 "print JSON::encode_json( {amt => '3€'}  );"
# {"amt":"3€"}


2019-09-23T09:51:25 rosti
Im Übrigen ist JSON ein sog. Serializer der dazu gedacht ist, komplexe Datenstrukturen transportfähig zu machen und zwar als Bytesequenz. Wobei Transportfähig heißt, STDOU u.a. beliebige Handles. Und Bytesweuenzen selbst kennen keine Kodierung.

Das ist richtig.

View full thread Apache error log erweitern