由于嵌入了百分比编码,www 表单 POST 的字符集始终为 ASCII,因此不需要charset
声明 for 。application/x-www-form-urlencoded
事实上,为此 MIME 类型指定字符集是无效的。
所以要从:
0x6b65793d76254333254134254333254241254333254142
进入:
key=v%C3%A4%C3%BA%C3%A
由于 ASCII 兼容性,使用几乎任何编码都可以实现相同的效果。
您可能会注意到数据仍然被编码。charset
请求的参数Content-Type
仅适用于发送的直接二进制文件(“将八位字节序列转换为字符序列”,正如他们在规范中所说的那样),而不适用于key=v%C3%A4%C3%BA%C3%A
转换中使用的机制key=väúë
,这实际上涉及将字符转换为其他字符.
html4 中的 application/x-www-form-urlencoded 方案“规范”非常没用,但html 5 实际上尝试了. 百分比编码的最终默认编码是 UTF-8,_charset_
如果可用,编码名称会在魔术参数中传输。
所以,是的,仍然没有一种好的和使用的正式方式(并且charset
在 Content-Type 中只是无效、错误和被误解)来声明嵌入百分比编码的字符编码。在实践中,我只会使用 UTF-8,因为它是一个非常严格的方案,当失败时回退到 ISO-8859-1因为你总是可以从 ISO-8859-1 退回。
对于 JSON,使用 UTF-8/16/32 之外的任何其他编码都是无效的,因为到处都假定 UTF-8。对于 XML,您可以读取 Content-Type 标头,回退到encoding
属性,最终您必须回退到 UTF-8 并在它不计算时声明无效。