【1】Tomcat 的编码是: iso-8859-1 我们常用的编码是gbk 和utf-8 服务器端不支持
【2】解决思路:
String s = "中国";
// %E4%B8%AD%E5%9B%BD
// URLEncoder 编码
// URLDecoder 解码
// [1]浏览器对中文进行了编码
String encode = URLEncoder.encode(s, "utf-8");
System.out.println(encode);
// [2]tomcat用iso-8859-1解码了
encode = URLDecoder.decode(encode, "iso-8859-1");
System.out.println(encode);
// [3]使用iso-8859-1编回来
encode = URLEncoder.encode(encode, "iso-8859-1");
System.out.println(encode);
// [4]在使用utf-8解回来了
encode = URLDecoder.decode(encode, "utf-8");
System.out.println(encode);
【3】Request 乱码解决
A,get访问方式:
[1]改变tomcat的编码方式
[2]手动编码
URLEncoder.encode(usernmae,"iso-8859-1");
URLDecoder.decode(usernmae,"gbk");
[3]解决get请求编码
浏览器发送中文字符串->中国->url编码为%E9%BB%91%E9%A9%AC->java iso-8859-1 解码->é??é??->需要利用iso-8859-1重编->%E9%BB%91%E9%A9%AC->
根据相应的解码方式解码
B,post 手动指定解码方式
[1]post 在获取数据之前对request对象设置编码
request.setCharacterEncoding("gbk");
Request 乱码解决案例:
【1】创建html,界面 重新去创建一个servlet删改容易出问题。action 要和web.xml里面url路径一致
<!DOCTYPE html>
<html>
<head>
<meta charset="gbk">
<title>Insert title here</title>
</head>
<body>
<form action="reqeust" method="get">
姓名:<input type="text" name="name" /> <br /> 密码:<input
type="password" name="pwd" /><br /> <input type="submit" />
</form>
</body>
</html>
【2】代码:
import java.io.IOException;
importjava.net.URLDecoder;
importjava.net.URLEncoder;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ReqeustSevlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// [1]获取请求方式
String method = request.getMethod();
// [2]获取请求路径
StringBuffer url = request.getRequestURL();
// [3]获取请求协议
String protocol = request.getProtocol();
System.out.println(method + " " + url + " " + protocol);
// [4]获取请求头
Enumeration<String> names = request.getHeaderNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
String value = request.getHeader(key);
System.out.println(key + " : " + value);
}
// post解决乱码的方式 要在获取字段前输入
//request.setCharacterEncoding("utf-8");
// [5]获取请求体
String name = request.getParameter("name");
// [6]解决中文乱码
name = URLEncoder.encode(name, "iso-8859-1");
name = URLDecoder.decode(name, "gbk");
String pwd = request.getParameter("pwd");
System.out.println("name = " + name + "pwd = " + pwd);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
response 乱码解决案例:
字节流
[1]设置响应编码
response.setCharacterEncoding("gbk");
[2]告诉浏览器编码方式text/html;charset=utf-8
response.setContentType("text/html;charset=utf-8"); 固定格式
字符流:
注意:服务端的编码要与浏览器保持一致
[1]告诉浏览器编码方式text/html;charset=utf-8
response.setContentType("text/html;charset=utf-8");
response.getOutputStream().write("黑马".getBytes("utf-8"));