我正在构建一个Web服务,并且有一个接受POST的节点来创建新资源.资源需要两种内容类型之一 - 我将定义的XML格式或表单编码变量.
这个想法是消费应用程序可以直接POST XML并从更好的验证等方面受益,但是还有一个HTML接口将POST表单编码的东西.显然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最初呈现的字符集,有没有办法告诉字符集?否则,我将不得不尝试根据字符存在来猜测字符集,而且总是有点不确定.
HTTP POST的默认编码是ISO-8859-1.
否则你必须看看那样的Content-Type标题
Content-Type: application/x-www-form-urlencoded ; charset=UTF-8
你也许可以申报表格