中文问题小结
通过分析几篇文章,得出以下结论:
1、在JSP页面中,通过在页首添加<%@ page contentType ="text/html;charset=GB18030" language="java" %>可以在JSP中显示中文!
2、JSP request默认的字符编码格式为ISO8859-1,因此,需要将相关字段值保存到数据库中,需要进行编码转换,可以有如下方式:
<1>将ISO8859-1编码转换成GB18030编码格式,可写如下方法来实现:
//字符编码转换:ISO8859-1 ---> GB18030
public static String toChinese(String strvalue){
try{
if(strvalue==null) {
return null;
}
else{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GB18030");
return strvalue;
}
}catch(java.io.UnsupportedEncodingException uee){
Logger.error("java.io.UnsupportedEncodingException in com.drc.util.Common.toChinese()");
return null;
}
}
public static String toChinese(String strvalue){
try{
if(strvalue==null) {
return null;
}
else{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GB18030");
return strvalue;
}
}catch(java.io.UnsupportedEncodingException uee){
Logger.error("java.io.UnsupportedEncodingException in com.drc.util.Common.toChinese()");
return null;
}
}
在action中采用如下类似的调用:
UserLoginActionForm form = (UserLoginActionForm) actionForm;
//String userName= (String)form.getUserName();
//String userName= (String)form.getUserName();
String userName= Common.toChinese(form.getUserName());
<2>通过过滤器方式来实现编码格式转换,可编写如下过滤器:
package com.drc.util;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import javax.servlet.FilterChain;
import java.io.IOException;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import javax.servlet.FilterChain;
import java.io.IOException;
public class CharsetFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("GB18030");
chain.doFilter(request,response);
}
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("GB18030");
chain.doFilter(request,response);
}
public void init(FilterConfig parm1) throws ServletException { }
public void destroy() { }
public void destroy() { }
}
需要在web.xml文件中配置过滤器:
<display-name>......</display-name>
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.drc.util.CharsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet> ...... </servlet>
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.drc.util.CharsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet> ...... </servlet>
在实现中不用写任何转换代码
3、直接读取SQL Server2000数据库中的中文值,不用进行相应的编码转换
4、对资源文件中的中文问题,需要进行相应的转换,可采用如下命令行:
native2ascii -encoding gb2312 temp.properties application_zh_CN.properties
5、需要写国际化的WEB程序,则需要将所有JSP页面编码格式设为UTF-8,且最好是在过滤器中设置编码格式转换,所有的资源文件全部在资源文件中给出

浙公网安备 33010602011771号