乱码解决方案
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"); } } } %>
以上是关于乱码解决方案的主要内容,如果未能解决你的问题,请参考以下文章