带有JSON主体的HTTP POST请求的默认编码

时间:2015-04-21 02:37:54

标签: json http encoding utf-8 character-encoding

当内容类型为" application / json"时,HTTP POST请求的默认编码是什么?没有明确的字符集"?

似乎有两个规格存在冲突:

  • JSON spec表示" JSON文本应以Unicode编码。默认编码为UTF-8。"
  • HTTP spec说"当发件人没有提供明确的字符集参数时," text"的媒体子类型type定义为默认字符集值为" ISO-8859-1"通过HTTP收到。"

3 个答案:

答案 0 :(得分:2)

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编码。 默认值      编码是UTF-8 ,以UTF-8编码的JSON文本是      可互操作的意思是它们将被成功读取      最大数量的实施;有很多实现      无法成功读取其他编码中的文本(例如      UTF-16和UTF-32)。

     

实现绝不能在a的开头添加字节顺序标记      JSON文本。为了互操作性,实现      解析JSON文本可以忽略字节顺序标记的存在      而不是将其视为错误。

application/...媒体类型通常定义为二进制格式。通过查看前几个字节,JSON解析器很容易区分UTF-8,UTF-16和UTF-32,因此不需要BOM(如上所述,不允许使用BOM)或明确的charset(未定义)。

答案 1 :(得分:1)

以下是来自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。

答案 2 :(得分:1)

您正在查看已被RFC 7231淘汰的RFC 2616. RFC 2616中的文本已在RFC 7231中消失。在任何情况下,该子句仅适用于text/...媒体类型,而不适用于{{ 1}}媒体类型。