乱码解决方案

Posted 洁瑞小弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乱码解决方案相关的知识,希望对你有一定的参考价值。

1.JSP乱码

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

charset是指服务器发往客户端展现时的编码;

pageEncoding用于设置JSP页面本身的编码。

JSP在部署后提供给用户使用,会经过三个阶段

  1 JSP生成java文件:这个阶段会使用pageEncoding所定义的编码格式进行转换

  2 java文件生成class文件:这个阶段由服务器tomcat自动使用utf-8编码把java文件转换成字节码class文件  

  3 通过读取class文件展现给用户:这个阶段由tomcat服务器获取字节码内容,通过使用contentType所定义的编码格式展现给用户。

2.HTML乱码

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

3.request中文乱码

request.setCharacterEncoding("utf-8");

这种方式对 URL传参这种JSP请求 是没有作用的。比如:

<a href="jspRequest.jsp?username=赵哥">url test request(zh)</a>

这种URL传参的方式,只能修改服务器tomcat的传输编码格式。

tomcat安装文件 apache-tomcat-6.0.43\conf 目录下的server.xml

<Connector port="8080" protocol="HTTP/1.1" 
                 maxHttpHeaderSize="2097152"
                         maxPostSize="0"
               connectionTimeout="20000" 
               URIEncoding="UTF-8"
               useBodyEncodingForURI="true"
               redirectPort="8447" />

4.cookie造成的中文乱码

Cookie由于需要保存在客户端中,因此使用过程中都需要编码以及转码:

  在保存Cookie数据前

  首先引入java.net.*,该包中包含URLEncoder类;

  保证response与request的编码正确;

  使用URLEncoder进行转码,并保存。

<%@ page language="java" contentType="text/html; charset=utf-8"
    import="java.net.*"
    pageEncoding="utf-8"%>
<%
//保证request以及response的编码 
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

//使用URLEncoder解决cookie中中文问题
String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
String password = URLEncoder.encode(request.getParameter("password"),"utf-8");
            
Cookie usernameCookie = new Cookie("username",username);
Cookie passwordCookie = new Cookie("password",password);
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000);
            
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
%>

在使用Cookie数据前

  依然要注意导入必备的包:java.net.*

  注意request的编码;

  使用URLDecoder进行解码

<%@ page language="java" import="java.util.*,java.io.*,java.net.*" contentType="text/html; charset=utf-8"%>
<%
        request.setCharacterEncoding("utf-8");
    
        String username = "";
        String password = "";

        Cookie[] cookies = request.getCookies();
        if(cookies!=null && cookies.length>0){
            for(Cookie c:cookies){
                if(c.getName().equals("username")){
                    username = URLDecoder.decode(c.getValue(),"utf-8");
                    System.out.println(username);
                }
                if(c.getName().equals("password")){
                    password = URLDecoder.decode(c.getValue(),"utf-8");
                }
            }
        }
%>

 

以上是关于乱码解决方案的主要内容,如果未能解决你的问题,请参考以下文章

如何解决EditPlus乱码问题

命令行的乱码以及编码的问题的解决方法

eclipse中java代码里出现中文乱码问题

eclipse中java代码里出现中文乱码问题

Intellij Idea乱码解决方案

Intellij Idea乱码解决方案