J2EE中文乱码的解决方案

转贴为主,中间夹一部分评论(红色的)

 

原帖地址:http://wanglei8.javaeye.com/blog/265770

使用的构建平台:Tomcat5.5+JDK1.5+Eclipse3.4.1

1.数据库建立为UTF-8格式
2.项目右键属性为UTF-8格式
3.所有页面申明为UTF-8
4.JDBC URL设为:UTF-8
jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8
5.数据库Driver选择UTF-8格式
6.Tomcat编码改成UTF-8
在server.xml里面增加URIEncoding="UTF-8"

Xml代码 其实个人测试了一下,到这一步我的系统里乱码已经解决了,无论使用GET方式还是POST方式,但是保留下面的部分,一是尊重原作者,二是万一以后遇到POST方式出乱码好有个应对方式。


7.加编码过滤器SetCharacterEncodingFilter.java 

注意:这个部分是对应于表单用POST来提交的情况,用POST提交时URL部分不会出现诸如param=value&param=value之类的东西,这样的话登录页面相对会安全点或者说漂亮一点
注意:根据所在包名确定具体使用哪个包

Java代码
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class SetCharacterEncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; protected boolean ignore = true; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true; else if (value.equalsIgnoreCase("true")) this.ignore = true; else if (value.equalsIgnoreCase("yes")) this.ignore = true; else this.ignore = false; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO 自动生成方法存根 if (ignore || (request.getCharacterEncoding() == null)) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void destroy() { // TODO 自动生成方法存根 this.encoding = null; this.filterConfig = null; } protected String selectEncoding(ServletRequest request) { return (this.encoding); } }
 在web.xml里面映射配置
Xml代码



关于编码,其实很奇怪,JAVA作为一个跨平台的东西,为什么J2EE里面诸如JDBC还有Tomcat这些设计者不用UTF-8之类的跨语言编码方式,JAVA最大的卖点在跨平台,既然这样,如果语言都不跨怎么跨平台?(很简单我一个英文WIN上开发的东西结果没注意这点放到一个日文或者中文的WIN上出乱码,这跟跑不动有什么区别?)。做东西的时候无论是C/C++还是JAVA个人都比较推崇Unicode这一编码方案,用C/C++的时候图简单可以使用UTF-16,JAVA则可以使用UTF-8,当然所有的项目都统一使用UTF-8更好。理由很简单啊,如果使用Tomcat默认的ISO9958-1那我要是要输入点中文怎么办?要是用gb2312或者gbk要是把项目从我的中文XP移植到一台英文的LINUX上不是要吐血?所以最好的方案就是统一使用UTF-8!

你可能感兴趣的:(String,null,import,character,跨平台,encoding)