自从做第一个项目开始就被各种乱码问题困扰,我只想说...哎..什么都不说了!来说说这次项目遇到的乱码问题吧!
曾经大二的时候用JSP做过一次课题设计,但是还是第一次做项目用到JSP。做一个全站的检索功能,用form表单提交数据。表单代码:
<span style="font-size:14px;"><form role="form" method="get" action="siteSearch.jsp" enctype="multipart/form-data">
<div class="input-group col-xs-6">
<input name="searchWord" id="searchWord" type="text"
value="${searchWord}" class="form-control"> <span
class="input-group-btn">
<button class="btn btn-default" type="submit">搜索</button>
</span>
</div>
</form></span>
一定有人要问这里为什么用get,额.....这个是为了和页面另一个模块传值方式统一。这里,传入后台的数据乱码!、
想到以前做课题设计的时候的解决办法:在页面开始的地方加上request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用String str = request.getParameter("searchWord"),即可得到汉字参数。但是接收到的数据依旧乱码,这种方式只适用于POST方式提交的数据。
下面开始说以get方式提交数据,乱码怎么解决。先说说导致乱码的原因吧!这个乱码的原因是tomcat的内部编码格式iso8859-1导致,Post提交数据乱码也是这个原因。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码。知道原因也就知道怎么解决这个问题了。接受参数时进行编码转换String str = new String(request.getParameter("searchWord").getBytes("ISO-8859-1"),"utf-8"),这种方式同样适用于POST提交方式。但是,这样每接受一个页面就得转一次码,貌似好麻烦,反正我是这么干的,不是我不怕麻烦,而是就那么一个页面以form表单提交值的。
当然,还有其它方式解决这个问题。Get以url参数的形式提交的,这就是为什么我表单传值用的get不是POST,页面中还有数据是以URL提交的。
其实在数据进入url之前已经进行了iso8859-1的编码处理。我们在火狐以及google浏览器中能看到中文参数是因为他们对编码进行了处理的,下面看看IE中url传递的参数可以看出在之间已经对数据进行了转码。所以,要想改变这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true" URIEncoding=”UTF-8”属性配置,即可控制tomcat对get方式的汉字编码方式。具体配置如下:
<Connector port="8080" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
URIEncoding=”UTF-8”/>
第一次写博客,写的不好,大神看到还望指点!