展会信息港展会大全

JSP中文字符乱码处理的2种方法
来源:互联网   发布日期:2016-03-01 10:56:08   浏览:1592次  

导读:在编写JSP程序时,常常会碰到中文字符处理的问题,在接受request的中文字符时显示出来一串乱码。网上处理方法一箩筐,下面说说我用过的两种有效地解决办法: 1.为程序编写一个字符串处理函数,用...

在编写JSP程序时,常常会碰到中文字符处理的问题,在接受request的中文字符时显示出来一串乱码。网上处理方法一箩筐,下面说说我用过的两种有效地解决办法:

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>

上面两种方法都测试过了,比较好用

赞助本站

人工智能实验室

相关热词: 开发 编程 android

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港