表单中文为什么会出现乱码
浏览器会对表单的中文参数进行编码,具体采用何种编码方式要看改表单所在的页面指定的编码方式,服务器端默认的解码方式:ios-8859-1不支持中文
乱码的根源:编码和解码方式不一样
解决方案
1、在html文件中添加消息头设置,只适用于post方法
具体为:<meta charset="UTF-8"/>
作用:模拟消息头,保证表单中的中文参数按照UTF-8的方式编码。告诉浏览器读到的是一个html文本,编码格式是utf-8前提是只对post可行
注意:get请求提交时,中文乱码解决:
修改 tomcat/conf/server.xml文件
在 <Connection>内添加属性:
URIEncoding=“UTF-8”
此方式不建议使用,因为要更改服务器
2、在服务器端:
对于post请求
使用Servlet读取表单的请求参数时,使用
resquest.setCharacterEncoding(“UTF-8”)
让服务器使用UTF-8的解码方式解析表单中的数据
对于get请求的数据,我们在相同的位置可以做如下处理
先获取请求参数
String userNmae=resuqest.getParameter(“userName”);
获得参数后,将其改为UTF-8
userName=new String(userName.getBytes(“ios8859-1”),'''UTF -8');
如何中文输出
response.setContentType("text/html;charset=utf-8");
必须在PrintWriter out = response.getWriter()之前调用才有效
作用1:指定out.println()使用utf-8格式编码输出
作用2:会生成一个消息头:
content-type:text/html;charset=utf-8
告诉浏览器返回的数据类型是html,编码是utf-8
建议:浏览器请求服务器时,尽量避免使用get方式提交中文参数