【1 post请求】
【问题】html网页中post请求Servlet处理,在控制台上打印出来的是中文乱码
需要在Servlet中的(doGET)方法内添加:
request.setCharacterEncoding("UTF-8");
即可解决
【2 get请求】
加入上边的代码,只可以解决post请求方式中的中文乱码!
【问题】把html中请求改为get方式,控制台上依然打印的是中文乱码
【方法1】修改tomcat编码集
【步骤】打开tomcat中conf目录下的server.xml:找到8080端口所在的那行记录,添加一个utf-8的编码集即可【URIEncoding="utf-8"】
原来的代码改为(注意对比原来的):
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8" />
保存,重启Servlet项目 再次访问html即可发现,控制台的中文乱码已经解决
【方法2】重新编解码
1 第一种】
修改代码
String username = request.getParameter("username");
// 将数据使用iso8859-1编译回去
byte[] bytes = username.getBytes("iso8859-1");
// 重新使用utf-8字符集将数据组合成字符串
String newUsername = new String(bytes, "utf-8");
System.out.println(newUsername);
【但是】这样仅仅对username这个做了编码重新编译,而未编译的其他参数,仍然会产生中文乱码现象
2 第二种】使用java提供的工具类
修改代码:
【注意导包为】
import java.net.URLDecoder;
import java.net.URLEncoder;
String username = request.getParameter("username");
String encodeusername = URLEncoder.encode(username, "iso8859-1");
// 再次使用utf-8对字符串进行解析
String decodeusername = URLDecoder.decode(encodeusername, "utf-8");
System.out.println(decodeusername);
【但是同样】这样仅仅对username这个做了编码重新编译,而未编译的其他参数,仍然会产生中文乱码现象
【3 Servlet处理转到浏览器中文乱码】
在Servlet中添加如下代码!(意思是通知浏览器使用utf-8格式解析此Servlet响应)
response.setCharacterEncoding("UTF-8");