评论

收藏

[JSP] JSP 中文字符处理代码

开发技术 开发技术 发布于:2021-10-24 10:03 | 阅读数:364 | 评论:0

网上处理方法一箩筐,下面说说我用过的两种有效地解决办法.
1.为程序编写一个字符串处理函数,用一个静态文件保存,在需要处理中文字符的JSP页面中包含它,
<%! 
public String codeToString(String str) 
{ 
String s=str; 
try 
{ 
byte temp[]=s.getBytes("ISO-8859-1"); 
s=new String(temp); 
return s; 
} 
catch(Exception e) 
{ 
return s; 
} 
} 
%>
要转换时只需:coedeToString(request.getParameter(..));就可以了,很好用的。
2.一种普遍适用的方法,加一个过滤器,之后就可以过上一劳永逸的日子了。
package filters; 
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; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletRequestWrapper; 
public class TomcatFormFilter implements Filter { 
/** 
* Request.java 
* 对 HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所 
有的 HttpServletRequest 
* 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只 
需要用新的 Request 对象替换页面中的 
* request 对象即可. 
*/ 
class Request extends HttpServletRequestWrapper 
{ 
public Request(HttpServletRequest request) { 
super(request); 
} 
/** 
* 转换由表单读取的数据的内码. 
* 从 ISO 字符转到 GBK. 
*/ 
public String toChi(String input) { 
try { 
byte[] bytes = input.getBytes("ISO8859-1"); 
return new String(bytes, "GBK"); 
} 
catch (Exception ex) { 
} 
return null; 
} 
/** 
* Return the HttpServletRequest holded by this object. 
*/ 
private HttpServletRequest getHttpServletRequest() 
{ 
return (HttpServletRequest)super.getRequest(); 
} 
/** 
* 读取参数 -- 修正了中文问题. 
*/ 
public String getParameter(String name) 
{ 
return 
toChi(getHttpServletRequest().getParameter(name)); 
} 
/** 
* 读取参数列表 - 修正了中文问题. 
*/ 
public String[] getParameterValues(String name) 
{ 
String values[] = 
getHttpServletRequest().getParameterValues(name); 
if (values != null) { 
for (int i = 0; i < values.length; i++) { 
values[i] = toChi(values[i]); 
} 
} 
return values; 
} 
} 
public void destroy() { 
} 
public void doFilter(ServletRequest request, ServletResponse 
response, 
FilterChain chain) throws IOException, ServletException { 
HttpServletRequest httpreq = (HttpServletRequest)request; 
if(httpreq.getMethod().equals("POST")) { 
request.setCharacterEncoding("GBK"); 
} else { 
request = new Request(httpreq); 
} 
chain.doFilter(request, response); 
} 
public void init(FilterConfig filterConfig) throws 
ServletException { 
} 
}
当然要记得改下web.xml
<filter> 
<filter-name>TomcatFormFilter</filter-name> 
<filter-class>filters.TomcatFormFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>TomcatFormFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping>
上面两种方法都测试过了,比较好用,以后发现新的,会再更新哦~
关注下面的标签,发现更多相似文章