为了账号安全,请及时绑定邮箱和手机立即绑定

什么是“内容类型:application / json; charset = utf-8“

什么是“内容类型:application / json; charset = utf-8“

什么是“内容类型:application / json; charset = utf-8“真的是什么意思?当我使用JSON主体向我的REST服务发出POST请求时,我将其包含Content-type: application/json; charset=utf-8在邮件头中。没有这个标题,我从服务中得到一个错误。我也可以成功使用Content-type: application/json没有;charset=utf-8部分。到底是charset=utf-8做什么的?我知道它指定了字符编码,但没有它,服务工作正常。此编码是否限制可以在邮件正文中的字符?
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

标题只表示内容的编码内容。不一定可以从内容本身推断内容的类型,即您不一定只看内容并知道如何处理它。这就是HTTP标头的用途,它们告诉收件人他们(应该)正在处理什么样的内容。

Content-type: application/json; charset=utf-8将内容指定为JSON格式,以UTF-8字符编码进行编码。对于JSON来说,指定编码有点多余,因为JSON的默认(仅?)编码是UTF-8。因此,在这种情况下,接收服务器显然很高兴知道它正在处理JSON并且假设默认情况下编码是UTF-8,这就是它使用或不使用标头的原因。

此编码是否限制可以在邮件正文中的字符?

不可以。你可以在标题和正文中发送任何你想要的东西。但是,如果两者不匹配,您可能会得到错误的结果。如果您在标头中指定内容是UTF-8编码但实际上您正在发送Latin1编码内容,则接收方可能会生成垃圾数据,尝试将Latin1编码数据解释为UTF-8。当然,如果您指定发送Latin1编码数据并且实际上是在执行此操作,那么是的,您可以限制为可以在Latin1中编码的256个字符。


查看完整回答
反对 回复 2019-08-12
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

为了证实声称默认的JSON编码是UTF-8 ...

来自IETF RFC4627

JSON文本应以Unicode编码。默认编码为UTF-8。

由于JSON文本的前两个字符将始终为ASCII字符[RFC0020],因此可以确定八位字节流是UTF-8,UTF-16(BE或LE)还是UTF-32(BE或LE)通过查看前四个八位字节中的空值模式。

      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


查看完整回答
反对 回复 2019-08-12
?
湖上湖

TA贡献2003条经验 获得超2个赞

请注意,IETF RFC4627已被IETF RFC7158取代。在[8.1]节中,它撤回了@Drew引用的文字:

Implementations MUST NOT add a byte order mark to the beginning of a JSON text.


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 16948 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信