在做web前端页面的时候,经常碰到传中文问题。网上有许多方案,但仍不能根治,最终要用js或者java的encode相关方法。
常规方案有三部:
1.改tomcat的server.xml中URIEncodeing为utf-8
2.页面中编码设置为utf-8
3.整个项目编码使用utf-8
我这样处理后,在火狐下,不会出现乱码,但IE中奇数个中文时仍有乱码。不过可以通过在页面中用URLEncoder.encode()方法解决,但如果在jsp页面里用又显得繁琐且不美观。
索性自己写个自定义标签来处理
使用此方法就不会再出现IE奇数个汉字成乱码的问题了,不多说,上代码
EncodeTag.java
Java代码 packagemypackage.util;
importjava.io.IOException;
importjava.net.URLEncoder;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.JspWriter;
importjavax.servlet.jsp.tagext.TagSupport;
importorg.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
publicclassEncodeTagextendsTagSupport {
privateObject key;//自定义标签的key属性
publicvoidsetKey(Object key)throwsJspException {
this.key=ExpressionEvaluatorManager.evaluate("key", key.toString(), Object.class,this, pageContext);
}
publicintdoEndTag() {
try{// 使用JspWriter获得JSP的输出对象
JspWriter jspWriterOutput = pageContext.getOut();
jspWriterOutput.write(URLEncoder.encode(key.toString(),"utf-8"));
} catch(IOException ioEx) {
System.out.println("IOException in HelloTag "+ ioEx);
}
returnEVAL_PAGE;
}
}
encode.tld(此文件需放在你的web项目的src目录下)
Xml代码 <?xmlversion ="1.0"encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
JSTL 1.1 core library
JSTL core
1.1
en
http://www.xxx.org/util/url/encode
urlEncode
mypackage.util.EncodeTag
empty
key
true
java.lang.Object
在jsp中头部引入
Java代码
在jsp中使用
Java代码 ">xxxx