猿问

检测HTTP POST请求的字符编码

我正在构建一个Web服务,并拥有一个接受POST来创建新资源的节点。该资源需要两种内容类型之一-我将要定义的XML格式或表单编码的变量。


这个想法是使用的应用程序可以直接发布XML并从更好的验证等中受益,但是还有一个HTML接口可以发布表单编码的内容。显然,XML格式具有字符集声明,但是仅通过查看POST就看不到如何检测表单的字符集。


来自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定义的,它只列出了%编码规则,但没有说明数据应包含的字符集。


基本上,如果我不知道最初显示的HTML字符集是什么,有什么方法可以告诉字符集?否则,我将不得不尝试根据存在的字符来猜测字符集,而我所能告诉的总是有些昧。


温温酱
浏览 783回答 3
3回答

米琪卡哇伊

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

慕慕森

尝试在Content-Type上设置字符集:httpCon.setRequestProperty( "Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary );
随时随地看视频慕课网APP
我要回答