第一步: Filter的实现:
处理中文编码的问题一般都不脱离不了使用filter,同时使用UTF-8也是推荐的做法,为此web.xml中此filter我想是经典的处理方法:
- <filter>
- <filter-name>encoderfilterfilter-name>
- <filter-class>your.framework.web.filter.EncodingFilterfilter-class>
- <init-param>
- <param-name>encodingparam-name>
- <param-value>utf-8param-value>
- init-param>
- filter>
第二步:设置页面的contentType为text/html;charset=utf-8使得页面编码方式为utf-8
contentType:指定的是JSP页最终 Browser(客户端)所见到的网页内容的编码.就是 Mozilla的 Character encoding, 或者是IE6的encoding。
- <%@ page contentType="text/html; charset=utf-8" language="java"%>
第三步:处理jsp页面中静态中文的问题:
这可以使用多种方式解决,一般如果有struts的经历,且是一个比较疯狂struts使用者的话,会使用 <bean:message key="info.def"></bean:message>info.def所对应的中文字符使用gb2312进行编码,但是我比较喜欢使用另外一种变通的方法,处理方法如下:
如a.jsp,则生成两个文件a.jsp,a_cn.jsp然后其内容为:
- <%@ page contentType="text/html; charset=utf-8" language="java"%>
- <jsp:include page="a_cn.jsp" flush="true" />
- <%@ page contentType="text/html; charset=gb2312" %>
- 正常显示的中文内容
经过如此处理之后a_cn.jsp中表单提交到数据库中的信息一样也不会出现乱码的情况,因为原理和struts的类似…………
第四步:处理javascript文件中的乱码:
如果沿用上面的处理机制,我们不可避免的要涉及到脚本的中文提示的问题,那么这里的乱码该如何处理呢?原理其实还是“第三步”的处理方式,对中文进行gb2312编码,我一般都选择编译整个js文件为gb2312.
第五步:其他情况
a、如果在实际的使用中gb2312不能满足字符集的要求的话,还是可以在可能出现特殊字符集的地方使用gbk等的编码。
b、要尽量使用post方式提交数据,无论是jsp页面中的还是javascript中的,
c、如果页面中 需要使用< src="myimage.jpg?id=中文",则处理方法为:
- <script language="javascript">
- document.write("<img alt='中文' src='/myimage.jpg?id=" + encodeURIComponent('<c:out value='${info.zhongwen}'/>') + "' width='120' height='150' />");
- script>
上面只是在实际的使用过程中的处理方法,原理其实就是两点:
1、保证客户端看到的编码为utf-8;
2、对jsp页面中的中文内容使用有效的中文编码处理,比如gb2312.