java解决request和response中文乱码问题

一,乱码原因

原因:前端(服务端)编码和后端解码格式不匹配。(服务端默认编码格式是iso8859-1)

将页面的编码格式申明为UTF-8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

在jsp页面还要使用

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="Utf-8"%>

pageEncodeing:指的是jsp的内容编码(使用UTF-8)

contentType : 服务端到后端的编码格式需要与后端解码格式相同

二、解决乱码

解决:将前端编码格式与后端转码格式设置为一样

1.response乱码

字符流编码设置

response.setCharacterEncoding("UTF-8");

response.setHeader("content-type", "text/html; charset=utf-8");

response.setContentType("text/html;charset=utf-8");

response.getWriter().println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"); 

字节流编码设置

response.getOutputStream().write("字符".getBytes("UTF-8"));

response.setHeader("content-type", "text/html;charset=UTF-8");

response.setContentType("text/html;charset=UTF-8");

2.request编码

1.get请求

    1.使用new String("字符".getbytes("ISO8859-1"),"UTF-8")来进行手动转码

    2.设置tomcat的server.xml的配置文件

   <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
    URIEncoding="UTF-8" useBodyEncodingForURI="true"/>

2.post请求

request.setCharacterEncoding(“UTF-8”);(意思是将请求的数据进行utf-8转码)

 3.编码过滤

 1.在web.xml下面设置spring的编码过滤能解决大部分编码问题

<!-- 中文编码过滤  开始-->
  <filter>
      <filter-name>characterEncodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
  </filter>
  <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 中文编码过滤  结束-->

2.但是有时使用post提交时(request流接收时任然不能正确转码)所以在读取流时可以下边进行转码

/**
     * 将一个输入流转化为字符串(转化编码格式)
     */
    public static String getStreamString(InputStream tInputStream) {
        if (tInputStream != null) {
            BufferedReader tBufferedReader = null;
            try {
                tBufferedReader = new BufferedReader(new InputStreamReader(tInputStream,"UTF-8"));
                StringBuffer tStringBuffer = new StringBuffer();
                String sTempOneLine = new String("");
                while ((sTempOneLine = tBufferedReader.readLine()) != null) {
                    tStringBuffer.append(sTempOneLine);
                }
                return tStringBuffer.toString();
            } catch (Exception ex) {
                ex.printStackTrace();
            }finally{
                try {
                    if(null != tBufferedReader){
                        tBufferedReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

猜你喜欢

转载自blog.csdn.net/weixin_41929877/article/details/83022114