表单用post方法提交数据时乱码问题(转)
2017-09-30 08:55
357 查看
表单用post方法提交数据时乱码问题(转)
(2014-03-18 18:14:44)
转载▼
标签:
|
1.首先搞清楚客户端是用那种编码方式将数据编码后提交的.
浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded;
charset=UTF-8
这样服务器端就可以知道form里的字符是怎么编码的了。要注意的是这里的charset=UTF-8是默认的,如果这个HTML代码里有,那么此HTML的form表单将以GBK的编码方式提交数据,其实表单提交数据使用的编码方式是可以指定的.那现在用HttpClient,根本就没有浏览器和具体的HTML代码,其实HttpClient的PostMethod对象里已经有设定编码方式的方法
Java代码
PostMethod post = new PostMethod("http://iteye.com");
post.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=UTF-8");
这里的编码方式可以随意指定,开始就是因为没有写这段,采用了Httpclient默认的编码方式,所以出现乱码,这里设置编码方式的方法也不唯一.ajax使用post方法提交数据的编码方式的设定也和这个类似.
2.服务器端是如何选择那种编码方式来对数据进行解码的呢.
首先我用request.getCharacterEncoding()来看表单提交数据所使用的编码方法,奇怪的是用浏览器提交request.getCharacterEncoding()是null,而用HttpClient提交request.getCharacterEncoding()的值是UTF-8,和客户端指定的编码方式一致,后来google了下,原来是浏览器做的手脚,IE是不将表单提交数据使用的编码方式写到HTTP头部发送出去的.我发现如果用HttpClient的post提交数据,编码方式指定的话,request.getCharacterEncoding()是能得到值的,而且request对象也用此编码方式解码,不用request.setCharacterEncoding("")指定;如果request.getCharacterEncoding()是null,就要request.setCharacterEncoding("")指定编码方式,要和你提交时设定的编码方式一致.然后request.getParameter("")的值就是你想要的了.(这里有可能有误的地方请指出)
相关文章推荐
- 表单用post方法提交数据时乱码问题
- 表单用post方法提交数据时乱码问题
- SoapUI进行REST请求,POST方法提交到数据库的数据乱码问题
- 针对表单的post方法提交乱码问题
- 关于在用curl函数post网页数据时,遇上表单提交 type为submit 类型而且没有name和id时可能遇到的问题及其解决方法
- 表单通过get和post方式提交数据解决乱码的方法
- Spring MVC 3 表单中文提交post请求和get请求乱码问题的解决方法
- 提交表单 将数据由gb2312改为utf-8 POST提交表单乱码问题
- 解决表单GET提交后台数据乱码问题
- JSP 表单输入,UTF编码,get方式提交数据出现中文乱码解决方法
- jquery中ajax方法提交数据时,中文乱码问题解决。
- form表单提交服务器,数据获取乱码问题
- 找到一篇关于form以post、get方式提交数据中文乱码问题总结
- Jsp表单提交数据乱码问题
- java中form以post、get方式提交数据中文乱码问题总结
- PHP无法获取表单post方式提交的数据问题
- 解决servlet中输出中文到浏览器以及post、get两种提交方法乱码问题
- jquery mobile 表单post提交数据问题
- Spring MVC 3 表单中文提交后乱码问题的解决方法
- PHP表单提交数据存入mysql的中文乱码问题