请求乱码
url地址请求乱码
get通过地址栏请求会出现乱码,大家可能知道和req.setCharacterEncoding()有关系,抱歉和地址栏乱码没有一毛钱关系,不能说是和get方法没有关系,因为get方法有地址栏请求和请求体请求,req.setCharacterEncoding()这个是设置请求体的,
解决方案
1.打开你下载的Tomat在里面找到conf\server.xml文件打开加入以下代码URIEncoding或者useBodyEncodingForURI="true"
2.如果不行就用就用下面的post的第二种方式进行解码
请求体key-value形式中文乱码
post请求
第一种方式只要再getParamter前面加上req.setCharaterEncoding("utf-8");
req.setCharacterEncoding("UTF-8");
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
System.out.println(user);
System.out.println(pwd);
2、这种方式是一个一个解码,如果你有多个中文字段就需要一个个解码
String user = req.getParameter("user");
String s = new String(user.getBytes("ISO8859-1"), "UTF-8");
System.out.println(s);
get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//IO解析
System.out.println("这是get方法");
BufferedReader br = new BufferedReader(new InputStreamReader(req.getInputStream()));
System.out.println(URLDecoder.decode(br.readLine(),"utf-8"));
br.close();
}
我们使用java.net.URLDecoder
对传递的URL编码字符串进行解码,并将解码后的字符串输出到控制台。这样可以确保中文字符正确显示。请注意,这种解码适用于对URL编码字符串进行解码,如果请求正文中的数据并不是URL编码的字符串,那么还需要根据具体情况使用适当的解码方式。
响应乱码
向页面输出中文乱码
servletResponse.setContentType("text/html;charset=utf-8");
向页面输出json串中文乱码
resp.setContentType("application/json;charset=utf-8");