charset参数可以与http/1.1中的application/json内容类型一起使用吗?

jfs*_*jfs 13 json http character-encoding

例如,它是有效的ajax请求:

$.ajax({
    type: "POST",
    url: "SomePage.aspx/GetSomeObjects",
    contentType: "application/json; charset=utf-8",
    ...
});
Run Code Online (Sandbox Code Playgroud)

有时用作示例,或者软件可以在没有显式字符集的情况下中断.

应用程序/ json媒体类型的rfc 4627表示它不接受第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
Run Code Online (Sandbox Code Playgroud)

可以解释为charset不应该与application/json一起使用.

第3节表明,这是没有必要指定字符集:

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
Run Code Online (Sandbox Code Playgroud)

因为可以从内容中输入UTF-8,16,32编码.为什么说UTF-8是默认的?在rfc中没有指定选择其他字符编码的方法,并且无论如何都可以确定地找到编码.或者是否有支持Unicode的其他(不是UTF-8,16,32)字符编码?

有人认为可以使用charset:

我不同意你的评估,必须放弃它.RFC 2046声明"除"text"子类型之外的其他媒体类型可能会选择使用此处定义的charset参数,"这表示对应用程序类型上charset参数的存在没有限制.此外,RFC 2045声明"MIME实现必须忽略其名称无法识别的任何参数".因此,假设其存在造成任何伤害是不合理的.

5月rfc兼容软件是否使用charset参数生成内容类型application/json?符合rfc标准的软件是否应该接受此类请求?

Jul*_*hke 8

application/json没有定义charset参数,因此包含一个参数是不正确的.RFC 2046所说的是应用程序类型通常可以有一个charset参数,例如application/xml.但是JSON没有.


jfs*_*jfs 6

最近的json rfc 7159说:

注意:没有为此注册定义"charset"参数.
添加一个对合规收件人没有任何影响.

即,charset必须被合规的收件人忽略.

它与rfc 2045一致:"MIME实现必须忽略任何名称无法识别的参数." 因为rfc 7159仍然指定:"必需参数:不适用;可选参数:n/a"用于application/json mime媒体类型(无参数).

json文本不再被约束为对象或数组,并且基于前两个字符计算字符编码的旧部分3在新的rfc中消失.允许使用UTF-8,UTF-16或UTF-32,但无法指定编码(没有BOM,UTF-8是默认值).

charset参数可以与http/1.1中的application/json内容类型一起使用吗?

charset="utf-8"使用时没有任何危害- utf-8是json文本的默认编码,但其他值可能会产生误导,因为兼容的收件人必须忽略该值.它只能破坏不正确解析Content-Type头的客户端,例如,通过将其逐字地与"application/json"或尝试使用utf-8编码以外的其他内容来解码json文本的客户端进行比较.

5月rfc兼容软件是否使用charset参数生成内容类型application/json?

没有.没有为application/json定义参数.

符合rfc标准的软件是否应该接受此类请求?

是的,它应该.charset必须忽略值.


ECMA-404(JSON数据交换格式)根据Unicode代码点定义json文本,即json本身不指定有关编码细节的行为.

ECMA-262(ECMAScript语言规范)还在String(Unicode类型)之上定义了json格式.