Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 多部分/表单数据,字段的默认字符集是什么?_Http_Standards Compliance_Multipartform Data_Rfc - Fatal编程技术网

Http 多部分/表单数据,字段的默认字符集是什么?

Http 多部分/表单数据,字段的默认字符集是什么?,http,standards-compliance,multipartform-data,rfc,Http,Standards Compliance,Multipartform Data,Rfc,如果没有给出字符集,解码多部分/表单数据时应该使用什么默认编码?RFC2388声明: 4.5表单数据中的文本字符集 多部分/表单数据的每个部分都应该有一个内容- 类型。如果字段元素是文本,则字符集 文本的参数表示使用的字符编码 例如,具有文本字段的表单,用户在其中键入“Joe owes” 100'欧元符号在哪里可能已返回表单数据 作为: 在我的例子中,字符集没有设置,我不知道如何解码文本/普通部分中的数据。因为我不想强制执行一些非标准行为,所以我要问在这种情况下预期的行为是什么。RFC似乎没有解

如果没有给出字符集,解码多部分/表单数据时应该使用什么默认编码?RFC2388声明:

4.5表单数据中的文本字符集

多部分/表单数据的每个部分都应该有一个内容- 类型。如果字段元素是文本,则字符集 文本的参数表示使用的字符编码

例如,具有文本字段的表单,用户在其中键入“Joe owes” 100'欧元符号在哪里可能已返回表单数据 作为:

在我的例子中,字符集没有设置,我不知道如何解码文本/普通部分中的数据。因为我不想强制执行一些非标准行为,所以我要问在这种情况下预期的行为是什么。RFC似乎没有解释这一点,所以我有点迷路了

谢谢大家!

的默认字符集是ISO-8859-1(拉丁文1),我想这也适用于这里

3.7.1规范化和文本默认值

--剪断--

“字符集”参数与某些媒体类型一起使用,以定义数据的字符集(第3.4节)。当发送方未提供显式字符集参数时,“文本”类型的媒体子类型被定义为在通过HTTP接收时具有默认字符集值“ISO-8859-1”。除“ISO-8859-1”或其子集以外的字符集中的数据必须使用适当的字符集值进行标记。有关兼容性问题,请参见第3.4.1节


这显然在HTML5中发生了变化(参见)

生成的多部分/表单数据资源中与非文件字段相对应的部分不得指定内容类型标头

那么指定的字符集在哪里呢?就编码算法而言,唯一的位置是在名为_charset_的表单数据集条目中

如果您的表单没有名为_charset_的隐藏输入,会发生什么?我已经在Chrome 28中测试过了,发送了一个UTF-8编码的表单和一个ISO-8859-1编码的表单,并检查了发送的头和负载,我没有看到任何地方给出的字符集(即使文本编码肯定会改变)。如果我在表单中包含一个空的字符集字段,Chrome将用正确的字符集类型填充该字段。我想任何服务器端代码都必须查找_charset u字段才能找到它

我在编写使用FormData对象的XMLHttpRequest.send的Chrome扩展时遇到了这个问题

让请求实体体是运行多部分/表单数据编码算法的结果,其中数据作为表单数据集,utf-8作为显式字符编码

mime类型是“多部分/表单数据;”、U+0020空格字符“boundary=”和多部分/表单数据编码算法生成的多部分/表单数据边界字符串的串联

如前所述,POST请求中没有指定charset=utf-8,除非在表单中包含一个空的_charset_uu字段,在本例中,该字段将自动填充为“utf-8”


这是我对事物状态的理解。我欢迎对我假设的任何更正

感谢@owlman的详细解释

这里有更多信息:

上载请求有效负载片段:

------WebKitFormBoundarydZAwJIasnBbGaUqM
Content-Disposition: form-data; name="file"; filename="xxx.txt"
Content-Type: text/plain
如果“xxx.txt”中有一些使用UTF-8编码的UNICODE字符,则Resin(从4.0.40开始)无法正确解码,但Jetty(9.x)可以

我认为Resin行为的原因是内容类型没有指定任何编码,因此Resin使用“ISO8859-1”对文件名进行解码,这可能会导致乱码

我在谷歌上搜索了一下:

看来树脂的行为符合Servlet规范2.3

我无法从中找到任何设置
这可能会改变树脂的这种行为。

对我来说完全是相同的问题,但解决方案不起作用。相反,我得到的是负载的一部分,其
name
设置为
charset
,但根本没有声明。这是我的输入:
@Ercksen,显然你应该使用“\u字符集”输入
------WebKitFormBoundarydZAwJIasnBbGaUqM
Content-Disposition: form-data; name="file"; filename="xxx.txt"
Content-Type: text/plain