0

我正在创建一个 RESTful 服务,客户端可能会发布一些 XML、JSON 或一些非结构化文本。可以想象,客户端可以发布中文字符等。这个问题几乎相同,Detecting the character encoding of an HTTP POST request,但它已经有四年了,我想看看是否有任何“最佳实践”已经合并。

编辑:这不是针对从表单(网页)发布的信息,而是针对客户端应用程序,因此 POST 请求的 Content-Type 将是 text/xml、text/plain 以及可能是 application/json 之类的内容。

4

2 回答 2

0

由于嵌入了百分比编码,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 并在它不计算时声明无效。

于 2013-04-18T20:51:28.693 回答
0

For XML and JSON the best practice is to always encode in UTF-8. XML has mechanisms for different character sets if you really must not use UTF-8, starting with the charset param given to the mimetype and then the charset param of the xml directive.

于 2013-04-18T18:05:58.377 回答