检测HTTP POST请求的字符编码

我正在构build一个Web服务,并有一个节点接受一个POST来创build一个新的资源。 资源需要两种内容types之一 – 一种我将要定义的XML格式,或者表单编码的variables。

这个想法是,消费应用程序可以直接POST XML,并从更好的validation等获益,但也有一个HTML接口,将张贴forms编码的东西。 显然,XML格式有一个字符集声明,但是我看不到只是通过查看POST来检测表单的字符集。

从Firefoxforms的典型post看起来像这样:

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-urlencodedtypes完全是用HTML定义的,它只是给出了%-encoding规则,但没有说什么charset数据应该在什么地方。

基本上,是否有任何告诉字符集的方式,如果我不知道原来呈现的HTML字符集? 否则,我将不得不根据字符是否存在来猜测字符集,而且从我所知道的情况来看,这总是有点不妥。

HTTP POST的默认编码是ISO-8859-1。

否则你必须看看Content-Type头,然后看起来像

 Content-Type: application/x-www-form-urlencoded ; charset=UTF-8 

你也许可以用你的表单来声明

 <form enctype="application/x-www-form-urlencoded;charset=UTF-8"> 

要么

 <form accept-charset="UTF-8"> 

强制编码。

一些参考:

http://www.htmlhelp.com/reference/html40/forms/form.html

http://www.w3schools.com/tags/tag_form.asp

POST中使用的字符集将与托pipe表单的HTML中指定的字符集相匹配。 因此,如果您的表单是使用UTF-8编码发送的,而UTF-8编码是用于发布内容的编码。 在将值转换为字符编码的字节集后,将应用URL编码。

尝试设置您的内容types的字符集:

 httpCon.setRequestProperty( "Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary );