1.String test=new String(request.getParameter("test").getBytes("ISO8859_1"),"gb2312");
这是对于直接用参数传到下个页面上的java接收
2.参数用escape()后在action中的转化
public class Escape {
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src
.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src
.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
}
3.escape(),unescape()用于javascript接收
<script language="javascript">
var tmpArr,QueryString;
var URL = document.location.toString();
if(URL.lastIndexOf("?")!=-1){
QueryString= URL.substring(URL.lastIndexOf("?")+1,URL.length);
tmpArr=QueryString.split("&");
for (i=0;i<=tmpArr.length;i++)
{ try{eval (tmpArr[i]);}
catch (e){
var re = new RegExp("(.*)=(.*)","ig");
re.exec(tmpArr[i]);
try{eval (RegExp.$1+"="+"/""+RegExp.$2+"/"");}
catch(e){}
}
}
}
else
{
QueryString="";
}
</script>
4.在J2EE工程中用过滤类
一个J2EE应用系统需要做下列几步工作:
1.开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。
2.使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
request.setCharacterEncoding(”UTF-8″)。
网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
需要配置web.xml 激活该Filter。
编写过滤器
package com.javer.test.language;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* <p>Title: EncodingFilter</p>
* @author javer(QQ:84831612)
* @version 1.0
* @link http://blog.csdn.net/java008
*/
public class EncodingFilter
implements Filter
{
FilterConfig config;
public void init(FilterConfig parm1)
throws javax.servlet.ServletException
{
this.config = parm1;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws java.io.IOException, javax.servlet.ServletException
{
if (req.getCharacterEncoding() == null || !req.getCharacterEncoding().equals("UTF-8"))
{
req.setCharacterEncoding("UTF-8");
}
chain.doFilter(req, res);
}
public void destroy()
{
this.config = null;
}
}
在web.xml文件中配置该过滤器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>javer‘s project</display-name>
<filter>
<filter-name>EncodingFilter</filter-name>
<display-name>EncodingFilter</display-name>
<description>对编码进行转换</description>
<filter-class>com.javer.test.language.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.在JSP头部声明:<%@ page contentType="text/html;charset= UTF-8" %>
4.在Jsp的html代码中,声明UTF-8: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5.设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
注意,上述写法是JBoss的mysql-ds.xml写法,多亏网友提示,在tomcat中&要写成&即可。一般其他数据库都可以通过管理设置设定UTF-8
6.其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。