JSON přes POST – problém s diakritikou

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
gawex
Člen | 8
+
0
-

Ahoj.

Píšu aplikaci která komunikuje s docházkovým zařízením formátem JSON. Zařízení pošle v hlavičce toto:

POST /zapis/databaze HTTP/1.1
HOST: www.mojeaplikace.cz
content-length: 60
content-type: application/json

{"command":"identification","type":"imprint","value":"1998"}`

Aplikace (server) pak odpoví:

A-Json: : {"user_id":1234,"name":"Jan","surname":"Sekera"}
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Length: 5
Content-Type: application/json; charset=UTF-8
Date: Tue, 08 Aug 2017 12:26:00 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Server: Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30
Set-Cookie: PHPSESSID=3ma9bhopt2b427cnvvfkicl0p7; expires=Tue, 22-Aug-2017 12:26:00 GMT; Max-Age=1209600; path=/; httponly; PHPSESSID=np71vbci9j9a25ied7l3fj2bb6; expires=Tue, 22-Aug-2017 12:26:00 GMT; Max-Age=1209600; path=/; HttpOnly; PHPSESSID=np71vbci9j9a25ied7l3fj2bb6; expires=Tue, 22-Aug-2017 12:26:00 GMT; Max-Age=1209600; path=/; HttpOnly
Vary: X-Requested-With
X-Frame-Options: SAMEORIGIN
X-Powered-By: Nette Framework

Nic neočekávaného, všechno funguje jak má.
Problém ale nastane v okamžiku, kdy se v hlavičce vyskytuje nějaká diakritika. Například je jméno Tomáš…atd. Server pak znaky á a š nahradí zcela náhodnými znaky.

Problém s diakritikou se mi nedaří vyřešit. Když odpověď pošlu v těle a né v hlavičce, tak je všechno v pořádku.

Vyzkoušel jsem i zaslání diakritiky ze strany zařízení (tedy poslaní POST hlavičky na server). Tady ale diakritiku, stejně jako v případě formuláře v pořádku přijal.

Dotaz: Poradíte prosím jak na to? A je vůbec možné posílat ze serveru hlavičky s diakritikou?

matopeto
Člen | 395
+
+1
-

v hlavicke to samozrejme ide len to musis spravne escapovat (Podla RFC2047).

Ale radsej by som to v hlavicke neposielal preco to potrebujes v hlavicke? :)

https://tools.ietf.org/html/rfc7230#…

Historically, HTTP has allowed field content with text in the
ISO-8859–1 charset [ISO-8859–1], supporting other charsets only
through use of [RFC2047] encoding. In practice, most HTTP header
field values use only a subset of the US-ASCII charset [USASCII].
Newly defined header fields SHOULD limit their field values to
US-ASCII octets. A recipient SHOULD treat other octets in field
content (obs-text) as opaque data.

Editoval matopeto (8. 8. 2017 15:18)