【发布时间】:2010-10-17 01:44:34
【问题描述】:
我正在构建一个 Web 服务,并且有一个接受 POST 以创建新资源的节点。该资源需要两种内容类型之一 - 我将定义的 XML 格式或表单编码变量。
这个想法是消费应用程序可以直接发布 XML 并从更好的验证等中受益,但也有一个 HTML 界面可以发布表单编码的内容。显然 XML 格式有一个 charset 声明,但我看不到我如何仅通过查看 POST 来检测表单的 charset。
从 Firefox 到表单的典型帖子如下所示:
POST /path HTTP/1.1
Host: www.myhostname.com
User-Agent: Mozilla/5.0 [...etc...]
Accept: text/html,application/xhtml+xml, [...etc...]
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
field1=value1&field2=value2&field3=value3
其中似乎没有包含任何有用的字符集指示。
据我所知,application/x-www-form-urlencoded 类型完全是在 HTML 中定义的,它只是列出了 %-encoding 规则,但没有说明数据应该在什么字符集中.
基本上,如果我不知道 HTML 最初呈现的字符集是什么,有什么方法可以告诉字符集?否则,我将不得不尝试根据存在的字符来猜测字符集,而我所知道的总是有点不确定。
【问题讨论】:
-
这里有很多细微之处,行为会因浏览器和操作系统而异。 IE 使用的一种约定是,如果您有一个名为
_charset_的隐藏输入,IE 将使用它在提交表单时使用的字符集填充该字段。另见相关问题stackoverflow.com/questions/12830546/…
标签: http rest http-headers