如果没有给出字符集,应该使用什么默认编码来解码多部分/表单数据? RFC2388 规定:
4.5 表单数据中文本的字符集
多部分/表单数据的每个部分都应该有一个内容-
类型。如果字段元素是文本,则字符集
文本参数表示使用的字符编码。
例如,带有一个文本字段的表单,用户在其中输入“Joe 欠
100'(其中 是欧元符号)可能会返回表单数据
作为:
--AaB03x
content-disposition: form-data; name="field1"
content-type: text/plain;charset=windows-1250
content-transfer-encoding: quoted-printable>>
Joe owes =80100.
--AaB03x
就我而言,未设置字符集,我不知道如何解码该文本/纯文本部分中的数据。由于我不想强制执行非标准行为,所以我想问这种情况下的预期行为是什么。 RFC 似乎没有解释这一点,所以我有点迷失了。
谢谢你!
这显然在 HTML5 中发生了变化(参见http://dev.w3.org/html5/spec-preview/constraints.html#multipart-form-data http://dev.w3.org/html5/spec-preview/constraints.html#multipart-form-data).
生成的 multipart/form-data 资源中与非文件字段对应的部分不得指定 Content-Type 标头。
那么字符集是在哪里指定的呢?据我从编码算法来看,唯一的位置是在名为的表单数据集条目内_字符集_.
如果您的表单没有名为的隐藏输入_字符集_, 会发生什么?我已经在 Chrome 28 中对此进行了测试,发送一份以 UTF-8 编码的表单和一份以 ISO-8859-1 编码的表单,并检查发送的标头和有效负载,并且我没有在任何地方看到给出的字符集(即使文本编码肯定发生了变化) )。如果我包含一个空的_字符集_表单中的字段,Chrome 会使用正确的字符集类型填充该字段。我想任何服务器端代码都必须寻找它_字符集_字段来弄清楚吗?
我在编写一个使用 XMLHttpRequest.send 的 Chrome 扩展时遇到了这个问题FormData对象,其中无论源文档编码是什么,始终以 UTF-8 进行编码 https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send.
令请求实体主体为运行 multipart/form-data 编码算法的结果,其中 data 作为表单数据集,并使用 utf-8 作为显式字符编码。
令 mime 类型为“multipart/form-data;”、U+0020 空格字符、“boundary=”以及由 multipart/form-data 编码算法生成的 multipart/form-data 边界字符串的串联。
正如我之前发现的,在 POST 请求中的任何地方都没有指定 charset=utf-8,除非您包含一个空的_字符集_表单中的字段,在本例中将自动填充“utf-8”。
这是我对事情现状的理解。我欢迎对我的假设进行任何更正!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)