几种乱码问题的解决方式

 最近搞了一个信息发布系统,遇到几个乱码问题,搞的头都大了。最后还是尝试着进行不同的去转码才把问题解决,所以将问题记录下来。

  1. JSP页面提交到Servlet为乱码:

问题原因:

由于我用的服务器是tomcat,tomcat在没有设置编码时默认为ISO8859-1编码格式,而我们设置的JSP编码方式是UTF-8的或者是GBK的,这样一来当在servlet中取的时候就会产生乱码问题。这种乱码是比较常见的乱码,网上也有好多解决这个问题的方法,在这我记录两种方式来解决乱码:

  • 通过设tomcat的编码方式,tomcat的conf下的server.xml中加上URIEncoding="GBK"
    <Connector port="9090" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />
  • 在程序中进行转码,这样比较麻烦一点:
String strContext = request.getParameter("context");
strContext = new String(strContext.getBytes("ISO-8859-1"),"GBK");
  1. response.sendRedirect()中文乱码:

说明:其实网上说的这个问题的挺多的,但一个没有能解决我的问题的,但是还是从众多的经验之谈中得到了启发解决了乱码问题,但还是没有真明白这是什么原因?怎么样能去避免这样的问题?还有什么更好的方式可以解决这个问题?希望在以后的工作和学习中能找到问题的跟源。

描述:我在servlet中使用response.sendRedirect("page.jsp?param=问题"),这里的中文"问题"在JSP页面String msg = (String)request.getParameter("param");获得的参数就是乱码,JSP中使用的是GBK的编码格式,而过滤器中也将request设置上了GBK的编码格式

request.setCharacterEncoding("GBK");

 

但是还是还是搞不定,最后使用下面这个方式将问题解决:

servlet中response.sendRedirect()这前,将url设置编码格式为"ISO8859_1":

String strUrl = "page.jsp?param=问题";
try {
      strUrl = new String(strUrl.getBytes("GBK"),"ISO8859_1");
} catch (UnsupportedEncodingException e) {
      e.printStackTrace();
}
response.sendRedirect(strUrl );

 在JSP中不进行任何的编码操作:

String msg = (String)request.getParameter("param");

 这样就解决了我的乱码问题,希望对别人也有帮助。在javaeye也看到一个朋友说的这种情况,但他说在servlet中转完了ISO8859_1以后,回到页面上再转回GBK,我试过不行。但不转确是对的!很诧异啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值