JSP虚拟主机,jsp空间,java空间,java虚拟空间JSP虚拟主机,jsp空间,java空间,java虚拟空间

JAVA常见中文问题的解决方案



作者:unkown    文章来源:www.java-cn.com
发布日期:2004年09月25日
JAVA常见中文问题的解决方法 

以下解决方案是笔者在日常生活中遇到的,希望能对你解决JAVA中文问题有所帮助。 

1.在jsp页面首部加上<%@page contentType=”text/html;charset=GB2312“%> 
在servlet中使用httpServlerResponse.setContentTpye(“text/html; charset=GB2312”);可以避免一些中文问题 

2.使用JDBC连接mysql数据库时,连接字符串写成如下形式可以避免一些中文问题: 
jdbc://mysql://hostname:port/DBname?user=username&password=pwd& 
useUnicode=true&characterEncoding= iso-8859-1 
如果是以数据源的方式连接数据库在配置文件中使用: 
<parameter> 
<name>url</name> 
<value>jdbc:mysql://hostname:port/DBname? &useUnicode=true&characterEncoding=iso-8859-1</value> 
</parameter> 
注意要使用&替换&符号,否则XML文件在解析的时候会出错。 

3.从数据库读出的数据有可能是乱码,遇到这种问题可以用如下方法解决: 
String desc = rs.getString(“desc”); 
desc = new String(desc.getBytes(“ISO-8859-1”),”GB2312”); 

4.某个页面提交中文内容给Servlet,Servlet要对提交的内容进行转码工作才能正确接收数据, 
通常我们是在servlet中增加以下代码来解决问题。 
httpServlerRequest.setCharacterEncoding(“GB2312”); 

5. 在struts中,对资源文件进行转码,使用JDK字带的转码工具: 
>native2ascii -encoding BG2312 Myresource.properties Myresource_zh.properties 

6.在struts中扩展org.apache.struts.action.RequestProcessor类,并覆写其中的processPreprocess()方法: 
package com.mypro.action; 

public class MyProRequestProcessor extends RequestProcessor 

protected boolean processPreprocess (HttpServletRequest request, 
HttpServletResponse response) 

try 

request.setCharacterEncoding(“GB2312”); 
//other code 

catch(Exception e){} 

return true; 


写完上面代码别忘了修改struts-config.xml: 
<controller processorClass=” com.mypro.action.MyProRequestProcessor”/> 

7. 用filter实现(推荐) 
package com.kefeiannan; 

import java.io.IOException; 
import javax.servlet.*; 

public class SetCharacterEncodingFilter implements Filter 


protected String encoding = null; 
protected FilterConfig filterConfig = null; 
protected boolean ignore = true; 

public void destroy() { 
this.encoding = null; 
this.filterConfig = null; 

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) 
throws IOException, ServletException { 
if (ignore || (request.getCharacterEncoding() == null)) { 
String encoding = selectEncoding(request); 
if (encoding != null) 
request.setCharacterEncoding(encoding); 

chain.doFilter(request, response); 

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; 

protected String selectEncoding(ServletRequest request) { 
return (this.encoding); 


配置你站点下的web.xml,在<web-app>后面加上 
<filter> 
<filter-name>Set Character Encoding</filter-name> 
<filter-class>com.kefeiannan.SetCharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
</filter> 

<filter-mapping> 
<filter-name>Set Character Encoding</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping>
Copyright © 2002-2012 JSPCN.net. All rights reserved.
JSP中文网    备案号:粤ICP备09171188号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号