【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 乱码解决案例:

Request 和 Response 乱码问题

Request 和 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"));

 

 

相关文章: