为了处理中文乱码部分能够在整个
WEB
系统中都能够使用到,所以将中文乱码处理写成了一个
Filter(
过滤器
)
,并在
web.xml
中配置所有的请求都将经过这个
Filter
进行过滤。
Filter
部分的代码如下:
public
class
ProFilter
implements
Filter
{
protected
FilterConfig
filterConfig
;
/**
*
初始化
*/
public
void
init(FilterConfig filterConfig)
throws
ServletException
{
this
.
filterConfig
=filterConfig;
}
private
String toUTF(String inStr)
throws
UnsupportedEncodingException
{
String outStr =
""
;
if
(inStr !=
null
)
{
//outStr=java.net.URLDecoder.decode(inStr);//
不用
decode
了
,
到这的时候就已经自动
decode
过了
//
将字符串转为
UTF-8
编码形式
outStr =
new
String(inStr.getBytes(
"iso-8859-1"
),
"UTF-8"
);
}
return
outStr;
}
/**
*
中文乱码过滤处理
*/
public
void
doFilter(ServletRequest svlrequest, ServletResponse svlresponse,
FilterChain chain)
throws
IOException, ServletException
{
HttpServletRequest request=(HttpServletRequest)svlrequest;
HttpServletResponse response=(HttpServletResponse)svlresponse;
String method = request.getMethod();
//1.
以
post
方式提交的请求
,
直接设置编码为
UTF-8
if
(method.equalsIgnoreCase(
"post"
))
{
try
{
request.setCharacterEncoding(
"UTF-8"
);
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//2.
以
get
方式提交的请求
else
{
//
取出客户提交的参数集
Enumeration<String> paramNames = request.getParameterNames();
//
遍历参数集取出每个参数的名称及值
while
(paramNames.hasMoreElements())
{
String name = paramNames.nextElement();
//
取出参数名称
String values[] = request.getParameterValues(name);
//
根据参数名称取出其值
//
如果参数值集不为空
if
(values !=
null
)
{
//
如果参数值集中只有一个值
if
(values.
length
== 1)
{
try
{
//
调用
toUTF(values[0])
函数
,(values[0]
即第一个参数值
)
方法转换参数值的字元编码
String vlustr=toUTF(values[0]);
//
并将该值以属性的形式藏在
request
request.setAttribute(name, vlustr);
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//
如果参数值集中有多个值
else
{
//
遍历参数值集
for
(
int
i=0;i<values.
length
;i++)
{
try
{
//
回圈依次将每个值调用
toUTF(values[i])
方法转换参数值的字元编码
String vlustr=toUTF(values[i]);
values[i] = vlustr;
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//
将该值以属性的形式藏在
request
request.setAttribute(name, values);
}
}
}
}
//
设置响应方式和支持中文的字元集
response.setContentType(
"text/html;charset=UTF-8"
);
//
继续执行下一个
filter,
无一下个
filter
则执行请求
chain.doFilter(request, response);
}
/**
*
销毁方法
*/
public
void
destroy()
{
}
}
过滤器部分,可用来处理页面提交的
post
和
get
方法产生的中文乱码问题。
Post
方式提交的数据(
form
表单中提交的数据)只需要进行请求字符编码设置
request.setCharacterEncoding(
"UTF-8"
);
和响应设置
response.setContentType(
"text/html;charset=UTF-8"
);
设置就可以了。
Get
方式提交的数据会包含在
url
中,(如:
leavesp?work=
部门主管审批),则需要取出参数名:
Enumeration<String> paramNames = request.getParameterNames();
(如:
work
)和取出参数值:
String values[] = request.getParameterValues(name);(
如:部门主管审批
),
然后再将参数值进行编码转换:
outStr =
new
String(inStr.getBytes(
"iso-8859-1"
),
"UTF-8"
);
过滤器写好这后就需要到
web.xml
中
<
web-app
>
与
</
web-app
>
之间进行配置了,
web.xml
中配置如下:
<!--
配置过滤器
-->
<
filter
>
<
description
>
处理中文乱码过滤器
</
description
>
<
filter-name
>
ProFilter
</
filter-name
>
<
filter-class
>
com.util.filters.ProFilter
</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
ProFilter
</
filter-name
>
<
url-pattern
>
*
</
url-pattern
><!--
过滤所有请求,注:
tomcat5
请用
/* -->
</
filter-mapping
>
这样配置之后只要页面有任何请求都会通过
ProFilter
进行中文处理了,就不会再发生中文乱码问题了。
那一串通过
get
传递过来的中文处理过程如下:
1.
在
jsp
页面的
JavaScript
里面进行编码处理:
url=encodeURI(‘
leavesp?work=
部门主管审批
’)
编码后结果:
url=
leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9
2.
因为在
web.xml
过滤器配置为
<
url-pattern
>
*
</
url-pattern
>
所以所有请求将会通过过滤器进行处理,此过滤器处理过程如下:
2.1
获得参数名集合:
Enumeration<String> paramNames = request.getParameterNames();
String name = paramNames.nextElement();
2.1
结果中有
name=’work’
;一值。
2.2
通过参数名获得参数值:
String values[] = request.getParameterValues(name);
因
work
的值只有一个所以
2.2
的结果为:
values[0]=’
é
¨é—¨ä¸»ç®¡å®¡æ¹’;(
此处得到的是字符串:“部门主管审批”的
iso-8859-1
编码格式字符
)
2.3
获得字符串的
UTF-8
编码格式字符:
outStr =
new
String(inStr.getBytes(
"iso-8859-1"
),
"UTF-8"
);
2.3
中获得的结果为
outStr=
“部门主管审批”
.
至此中文已经正常了。
不过过滤器还没处理结束,还得将参数名对应的值
(
已经处理的值
)
再重新藏到请求中去。
2.4
将参数名对应结果藏入请求中:
request.setAttribute(name,
outStr
);
通过
2.4
处理后,请求中的
work
的值就变成了:部门主管审批
2.5
继续执行下一个
filter,
无一下个
filter
则执行请求
chain.doFilter(request, response);
3.
通过过滤器之后,就可以进入请求中对应
leavesp
的
servlet
了(
servlet
就不做说明了),此时在
servlet
中通过
String work=request.getParameter(“work”);
就可以获得
url
中传递过来的中文参数值了,结果为
work=”
部门主管审批
”
。
分享到:
相关推荐
教学视频--JSP中URL传递中文乱码问题的解决演示.rar
asp.net中URL参数传值中文乱码的三种解决办法
URL地址传参中文乱码处理是指在Web应用程序中,将中文参数传递给服务器时,可能出现乱码的情况。这种情况可能是由于编码问题或Tomcat服务器的配置问题引起的。 在处理URL地址传参中文乱码时,通常有三种解决方案: ...
解决奇数个中文字符url传递乱码问题,做了好久才找到的解决方案!
jsp使用URL编码传递中文参数乱码问题
在使用myeclipse过程中,我使用ajax同步请求传递参数到后台却出现中文乱码,这是我解决问题的代码,希望对您有所帮助
从A页面通过url传参到B页面时,获取URL中参数出现中文乱码问题,解析url参数的正确方法如下,感兴趣的朋友可以参考下
Jsp页面在URL中传递参数会出现乱码,本人想到两种方法解决,虽然不能保证100%解决,但值得学习
asp.net页面通过URL参数传值中文乱码问题解决办法
JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...
本篇文章主要是对通过url方式传递中文乱码的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符... 由于我们利用URL传递参数这种方式是依
JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题。 而我们的UTF-8则可以解决这一问题。 最终指需要修改JQuery的代码,显式声明contentType使用utf-8字符集,即可...
ASP.NET的字符编码问题真是搞得人头疼,其中的中文很容易产生各种乱码问题,而这些乱码归根结底都是因为使用编码方式不匹配造成的。 因为常常需要通过URL字符串在不同页面间传递参数时遇到中文,必须进行编码和解码...
在页面中对URL进行编码,最好不要在URL中传递中文参数否则会出现乱码
PHP fopen 读取带中文URL地址的一点见解PHP中文URL编解码(urlencode()rawurlencode()php中解析带中文字符的url函数分享php中url传递中文字符,特殊危险字符的解决方法php下目前为目最全的CURL中文说明php url地址栏传...
如果你安装的是IIS rewrite_2.0的话,传递的参数都是UTF-8格式的,如果你网站是GBK的就会出现中文连接乱码。 解决办法: rewrite_2.0规则写法: RewriteRule ^news_list_([0-9a-zA-Z\u4e00-\u9fa5]+)\.html$ news_...
在 ASP.NET 开发中,URL 传递中文参数是一件很常见的事情,但是却常常会出现乱码的问题。解决这个问题的方法有多种,本文将介绍三种解决方案。 解决方案一:设置 web.config 文件 在 ASP.NET 项目中,我们可以通过...
编码编好的url是正确的,可传到另一个页面 就会出错,在地址栏就已经乱码了 1.设置web.config文件 代码如下: <system> ”gb2312″ responseEncoding=”gb2312″ culture=”zh-CN” fileEncoding=”gb2312″> ...