【发布时间】:2015-06-28 00:08:43
【问题描述】:
当内容类型为“application/json”且未给出显式字符集时,HTTP POST 请求的默认编码是什么?
似乎两个规范存在冲突:
【问题讨论】:
-
您没有使用
text/...媒体类型发送请求,因此 HTTP 规范的该条款不适用。
标签: json http encoding utf-8 character-encoding
当内容类型为“application/json”且未给出显式字符集时,HTTP POST 请求的默认编码是什么?
似乎两个规范存在冲突:
【问题讨论】:
text/... 媒体类型发送请求,因此 HTTP 规范的该条款不适用。
标签: json http encoding utf-8 character-encoding
这是来自 W3C 的 XMLHttpRequest 算法格式
JSON 响应实体主体是 JavaScript 值 表示响应实体主体。如果 JSON 响应实体 body为null,设置为如下算法的返回值:
1. Let JSON text be the result of running utf-8 decode on byte stream response entity body. 2. Return the result of invoking the initial value of the parse property of the JSON object defined in JavaScript, with JSON text as它的唯一参数,如果该函数抛出异常,则为 null。
http://www.w3.org/TR/XMLHttpRequest/#json-response-entity-body
服务器默认设置为 UTF-8。
【讨论】:
您正在查看已被 RFC 7231 淘汰的 RFC 2616。RFC 2616 中的文本已在 RFC 7231 中消失。无论如何,该子句仅适用于 text/... 媒体类型,不适用于 application/... 媒体类型。
【讨论】:
application/json 媒体类型在RFC 7158 The JavaScript Object Notation (JSON) Data Interchange Format
(已废弃 RFC 4627)中正式定义,并在 IANA 注册,没有任何必需或可选参数(因此,charset 未为 application/json 定义)。
Section 8.1 Character Encoding 说:
JSON 文本应以 UTF-8、UTF-16 或 UTF-32 编码。 默认 encoding 是 UTF-8,而以 UTF-8 编码的 JSON 文本是 互操作性,因为它们将被成功读取 最大实现数;有很多实现 无法成功读取其他编码的文本(例如 UTF-16 和 UTF-32)。
实现不得在开头添加字节顺序标记 JSON 文本。为了互操作性,实现 解析 JSON 文本的可能会忽略字节顺序标记的存在 而不是将其视为错误。
application/... 媒体类型通常定义为二进制 格式。 JSON 解析器很容易通过查看前几个字节来区分 UTF-8、UTF-16 和 UTF-32,因此不需要 BOM(如上所述,这是不允许的)或显式的charset(未定义)。
【讨论】: