Kann charset-parameter verwendet werden, die mit application/json content-type im http/1.1?
Beispielsweise ist es gültig ajax-request:
$.ajax({
type: "POST",
url: "SomePage.aspx/GetSomeObjects",
contentType: "application/json; charset=utf-8",
...
});
Ist es als Beispiel verwendet, manchmal oder software brechen kann, ohne explizite charset -.
Der rfc 4627 für application/json media type sagt, dass es nicht akzeptieren alle Parameter, die in Abschnitt 6:
The MIME media type for JSON text is application/json.
Type name: application
Subtype name: json
Required parameters: n/a
Optional parameters: n/a
Und Abschnitt 3 schlägt
es ist nicht notwendig, um anzugeben, charset:
JSON text SHALL be encoded in Unicode. The default encoding is
UTF-8.
Since the first two characters of a JSON text will always be ASCII
characters [RFC0020], it is possible to determine whether an octet
stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
at the pattern of nulls in the first four octets.
00 00 00 xx UTF-32BE
00 xx 00 xx UTF-16BE
xx 00 00 00 UTF-32LE
xx 00 xx 00 UTF-16LE
xx xx xx xx UTF-8
da UTF-8,16,32 Codierungen kann geschlossen werden aus dem content. Warum sagt Sie, dass UTF-8 ist Standard? Den Weg zu wählen, eine andere Zeichenkodierung nicht angegeben ist in der rfc und die Codierung gefunden werden kann deterministisch sowieso. Oder gibt es andere (nicht UTF-8,16,32) Zeichensätze, die Unicode unterstützen?
Einige argumentieren, dass charset verwendet werden kann:
Ich Stimme mit Ihrer Einschätzung, dass es muss gelöscht werden. RFC-2046
besagt, dass "andere Medien-Typen als Subtypen von "text" wählen könnte, für
beschäftigen Sie den charset-parameter, wie hier definiert," was bedeutet, dass
es gibt keine Beschränkung auf die Anwesenheit der charset-parameter auf
Anwendungs-Typen. Außerdem, RFC 2045 besagt, dass "MIME
Implementierungen ignorieren müssen alle Parameter, deren Namen Sie nicht
erkennen." Also, es ist nicht vernünftig anzunehmen, dass es irgendeinen Schaden
durch seine Präsenz.
Können rfc-konforme software generieren Sie content-type application/json mit einem charset-parameter? Sollten rfc-konforme software akzeptieren Sie solche Anfragen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
application/json nicht definieren ein-charset-parameter, so ist es falsch zu enthalten. Was RFC-2046 sagt, dass die Anwendung von Typen in der Allgemeinen könnte haben ein charset-parameter, wie zum Beispiel application/xml. Aber JSON nicht.
if( httpHeader.getHeaderLineContent("Content-Type").trim().equals("application/json") ) { ... }
zu entscheiden, ob das Parsen der input als JSON. Wenn du denkst es geht nicht, dann sind Sie sind unter der Annahme, dass die Umsetzung sprechen Sie implementiert alle relevanten Normen genau auf den Brief.; charset=utf-8
... Also keine Sorge, es wird nicht lange dauern, bis es Hinzugefügt wird, der spec, dass es ok ist, das zu tun 🙂; charset=utf-8
angehängt wird für die kommenden Jahre in vielen software-Paketen. Und als Ergebnis, dass, pragmatische standards Designer sollte nur änderung der Spezifikation zu ermöglichen... Und ich vermute, Sie werden irgendwann. Und ja, auch ich änderte meine software, um es Arbeit ich.s.a-spec-konform ist.Den letzten json-rfc 7159 sagt:
d.h.,
charset
müssen ignoriert werden durch kompatible Empfänger.Übereinstimmung mit dem rfc 2045: "MIME-Implementierungen ignorieren müssen alle Parameter, deren Namen Sie nicht erkennen." da rfc 7159 noch gibt: "Erforderliche Parameter: n/a; Optionale Parameter: n/a" für application/json mime-media-Typ (keine Parameter).
Den json-text ist nicht mehr eingeschränkt werden, um ein Objekt oder ein array und die alt Abschnitt 3 berechnet, dass die Zeichen-Codierung auf der Grundlage der ersten beiden Zeichen ist Weg in die neue rfc. UTF-8, UTF-16 oder UTF-32 sind erlaubt, aber es gibt keine Möglichkeit das encoding anzugeben (ohne BOM, UTF-8 ist der Standard).
Schadet es nicht, wenn
charset="utf-8"
verwendet wird -- utf-8 ist die standardmäßige Codierung für json text, aber andere Werte können irreführend sein, da muss der Wert ignoriert werden, indem kompatiblen Empfänger. Es kann nur brechen, clients, analysieren, Content-Type-header falsch z.B., durch den Vergleich wörtlich mit "application/json" oder clients, die versuchen, eine andere als utf-8-Codierung zu decodieren, die den json-text.nicht. Keine Parameter definiert sind, für die Anwendung/json.
ja, sollte es. Der Wert von
charset
ignoriert werden müssen.ECMA-404 (JSON Data Interchange Format) definiert json-text in Bezug auf die Unicode-code-points d.h., json selbst gibt kein Verhalten für die Codierung von details.
ECMA-262 (ECMAScript Language Specification) definiert auch das json-format auf der Oberseite der Zeichenkette (Unicode-Art).
Laut Julian Reschke Antwort, anscheinend nicht. Aber wie Sie wies darauf hin, Sie möglicherweise stoßen in der wildnis und dann hätte es zu meistern,, wenn Sie wollen sprechen Sie mit nicht-rfc-konforme hosts.
Für einen, wenn Sie code haben, die Griffe
Accept-Charset
und die charset-Teil der content-Typen für text-basierte Nachrichten im HTTP-framework, warum nicht einfach verwenden, für JSON, auch? Programmierung-Weise, es ist sowohl einfacher (keine spezielle Regel für json) und mehr Allgemeinen.Persönlich, ich würde sagen, let ' s go Unicode (in der Kodierung Erkennung, die Sie zitieren) für jedes bit des Textes. Leider gibt es client Geräte gibt, zB japanische Mobiltelefone, , dass nicht die Verarbeitung von Unicode -, aber nur
Shift_JIS
. Sie würde sonst gerne JSON-Verbraucher (und zahlende Kunden). Also, was werden Sie tun? In meinem speziellen Fall, um diese Kunden an Bord, die ich aus dem Zeichensatz konfigurierbar über das standard-HTTP-Mechanismen.On a side note,
HTTP 2.0
gearbeitet wird, jetzt, und wenn die Jungs jemals hoffen, um einen standard, der starr eingehalten werden, Sie haben, um zu schreiben von Akzeptanztests. Das könnte natürlich auch bedeuten, ohne zuvor genannten legacy-clients, wenn die Regeln nicht gebogen werden gelegentlich.Und was ist der Sinn des seins kompatibel, wenn niemand sonst ist, aber Sie? Ich Frage mich, ob auch
Opera
konform ist, oder, für diese Angelegenheit, wenn alle RFCs implementiert werden können eindeutig interpretiert in den ersten Platz. Ich denke nicht so, vor allem im Fall von größeren wieHTTP
.Wenn das klingt wie HTTP-bashing, lassen Sie mich nur dies sagen: HTTP ist der hohe standard, mit Konzepten, die revolutioniert nicht nur das internet. Die Art und Weise, z.B. Ressourcen angegeben werden (Staatenlosigkeit) vorliegen, oder die Art, wie die Zwischenspeicherung erfolgt, hat gute Muster, rieselte in den Implementierungen von vielen Anwendungen. Und HTTP 2 abholen konnte, wo 1.1 aufgehört. Lasst uns einfach hoffen, dass SPDY werden nicht übernommen 1 zu 1. Ich hasse es zu sagen, aber in diesem Fall sieht es aus wie Microsoft ' s HTTP Speed+Mobility ist in vielerlei Hinsicht mehr HTTP-ey als Google - Aufdringlich (und soweit unRESTy) SPDY.