分类: Java Web 解决办法 java 2012-08-12 09:31 1694人阅读 评论(0) 收藏 举报

ServletJSP

JSP和Servlet的中文乱码处理

前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下。应该是可以解决日常的乱码问题了。现在作以下总结希望对需要的人有所帮助。我也是刚学,所以有不足之处希望谅解。

一、表单提交时出现乱码:

在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以请求的时候便有get请求和post请求。以前我一直以为get请求和post请求方式出现的乱码的解决方式是一样的,但是今天才知道两种请求方式所产生的乱码的解决方式是不同的。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。

1、客户端的get请求

对于不同的请求方式,解决乱码的问题也是不一样的,对于客户端的get请求来说,服务器端处理要想不出现乱码,解决这个问题稍微复杂一些,需要用到String类型的构造函数,其中的一个构造函数就是用指定的编码方式去解码,一般都用“UTF-8”的方式。只要在服务器端将请求得到的参数重新构造成一个字符串就行了。如下所示:

String  stuname = request.getParameter("stuname");

String str = new String(stuname.getBytes("ISO-8859-1"),"utf-8")

经过构造之后,客户端输入中文,且表单时get请求的情况下,str就变成了中文了。如果请求参数比较多,最好将它封装成一个工具类:

public class MyUtil

{

public static String getNewString(String str) throws UnsupportedEncodingException

{

return new String(str.getBytes("ISO-8859-1"),"UTF-8");

}

}

String stuname= MyUtil.getNewString(request.getParameter("stuname"));

2、客户端的post请求

对于客户端的post请求来说,处理乱码的问题就比较简单了,因为请求的数据时作为请求体的一部分传递给服务器的,所以只要修改请求内的编码就行了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:

request. setCharacterEncoding(“UTF-8”);

这样用户在服务器端获取到的中文数据就不再是乱码了。

二、超链接时出现乱码(低版本浏览器不行IE6)

在Web开发中,挺多的时候都是通过超链接去传递中文参数的,这也会导致在显示的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了一个请求,而它发出的请求是属于get请求,所以对于超链接的乱码来说,它处理乱码的方式和表单的get请求出现乱码的方式是一样的。

String stuname= MyUtil.getNewString(request.getParameter("stuname"));

三、重定向时出现乱码(低版本浏览器不行IE6)

有时写上response的sendRedirect()方法进行重定向时也会出现乱码,重定向时实际上也是向服务器发送了一个请求,所以解决乱码的方法和和上面是一样的。

四、浏览器版本低导致的乱码

上网的时候,有时提交的一些信息在地址栏显示的是“%2C%C6%CC%C6”的字样,其实这都是防止出现乱码进行的解决方案,如果你的浏览器是IE6或以下版本,则我们的第二种情况和第三种情况会出现乱码(尤其是当中文是奇数的时候),这就不好使了所以我们必须采用另一种比较实际的作法:

在java.net包中提供了URLEncoder类和URLDcoder类,这两个类又分别提供了encode和decode两个静态方法,分别用于进行编码和解码。我们将要传递的中文参数进行编码之后,在传递给服务器,服务器解码之后,就可以显示中文了。

进行编码:URLEncoder.encode(stuname,”UTF-8”)

传递给服务器:<a href=”/1.jsp?stuname<%=stuname%>”>传递</a>

进行解码:URLDecoder.decode(stuname,”UTF-8”);

这样就可以得到传递过来的中文参数了,我发现许多网站用的都是这种方式解决中参数的。

五、返回浏览器显示的乱码

在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。我们为了防止乱码,经常将以下两条语句一起写上:

response.setContentType(“text/html;charset=utf-8”);

response. setCharacterEncoding(“UTF-8”);

只要编写Servlet文件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第二句话,因为它的优先级高,它的设置结果将覆盖setContentType等方法设置的字符编码集。

六、修改Tomcat的编码

在上述的get请求所导致乱码问题中,还有一种解决的方案,我们常用Tomcat作为运行Servlet和JSP的容器,而Tomcat内部默认的编码是ISO-8859-1,所以对于get请求方式,其传递的数据(URI)会附加在访问的资源后面,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求方式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置文件server.xml中找到修改Tomcat的端口的地方,在其内部加入URIEncoding属性,设置为和你的项目中所设的编码一样的值,这里全部都是UTF-8。如下所示:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"  URIEncoding="UTF-8" />

七、使用MySQL数据库乱码

有时会用JDBC连接MySQL数据库,可能会出现乱码,所以要在连接之后加上如下的语句:

useUnicode=true&characterEncoding=UTF-8 这样就可以解决乱码问题了。

在编写Servlet和JSP的时候,为了避免出现乱码,最重要的就是:采用一致的编码,如果编码都一致了,肯定不会出现乱码。如果出现了乱码肯定那个地方不一致了。

转载于:https://www.cnblogs.com/6502ck/p/3498413.html

jsp以及servlet中文乱码问题相关推荐

  1. 【已解决】对JSP页面传值中文乱码的简单解决方法

    很多java程序员在日常的工作中总会遇到对JSP页面传值中文乱码的情况,一些朋友由于操作不当,造成了很大的麻烦.本文将为大家讲解关于对JSP页面传值中文乱码的简单解决方法的内容. 方法/步骤 方法一: ...

  2. servlet中文乱码处理

    servlet中文乱码处理 如果是post 设置req.setCharacterEncoding("utf-8"); 如果是get,不去修改服务器配置的情况下 new String ...

  3. 页面跳转之转发和重定向+Servlet中文乱码问题

    页面跳转之转发和重定向+Servlet中文乱码问题 一.页面跳转 <?xml version="1.0" encoding="UTF-8"?> &l ...

  4. jsp,servlet中文乱码问题

    在jsp页面中设置了编码为UTF-8 ,从网上看以下方法,用filter也可以解决传递参数的中文乱码问题 这里再介绍一种方法: request.setCharacterEncoding("U ...

  5. html输入表单jsp返回数据中文乱码,JSP/Servlet页面中文显示为乱码的解决方式

    经过网上搜索和自己的经验,JSP/Servlet页面的中文显示为乱码的问题可以细分为5类: 1. JSP页面显示乱码. 2. Servlet接收Form/Request传递的参数时显示为乱码 3. J ...

  6. Java中文jsp页面_java中文乱码解决之道(七)—–JSP页面编码过程

    我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. 在上面代码中有两个地方存在编码:pageEncodi ...

  7. JSP怎么解决中文乱码问题

    一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大 ...

  8. jsp中解决中文乱码问题(基础问题)

    在两个jsp简单页面编写中,出现了一个问题,出现了中文乱码, 本应该出现的中文显示不出来,分析如下:java编程之所以会出现说出现中文乱码是 因为:Java的内核和class文件是基于unicode的 ...

  9. servlet中文乱码_10分钟快速掌握Servlet相关基础知识

    Servlet的学习路线 1. 创建Servlet 2. Servlet的相关配置 3. Servlet的生命周期 4. HttpServletRequest接口 5. HttpServletResp ...

  10. servlet中文乱码_Servlet入门 信息过滤

    浏览器和web服务器通信,请求是输入的信息流,响应是输出的信息流,它们走的是服务器的同一个端口.当我们想对信息流做统一处理时,可以使用端口后面的过滤器,它就是Servlet API定义的Filter接 ...

最新文章

  1. Java中深浅拷贝之List
  2. 更改Apache默认网站根目录
  3. linux操作普通文件夹,Linux学习--2.文件管理的基本命令
  4. 测试规范包括哪些_光学会自动化测试还不够?还差最后这一步!
  5. python常用函数-python—各种常用函数及库
  6. Qt第三方库QCustomPlot——认识图表的各个部分
  7. d3代码如何改造成update结构(恰当处理enter和exit)
  8. 解决 windows10和ubuntu16.04双系统下时间不对的问题
  9. 震惊!Fibonacci Again
  10. 7 款 Python 开源框架的优劣总结
  11. STL(七)——队列queue优先队列priority_queue
  12. WPF学习:3.Border Brush
  13. uboot开机logo
  14. 快学scala下载[pdf] pdf转doc java提取pdf(forty day)
  15. java beanshell_jmeter进阶之Beanshell引用Java代码
  16. 传统IT架构下面临的挑战?
  17. 真正免费的天气API,无需注册申请key
  18. 解决centOS7以上版本防火墙关闭失败的问题
  19. JavaScript实现购物车计算价格功能
  20. 主张:男人害怕的30种女人(zt)

热门文章

  1. Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (高级)
  2. 如何从课堂与教学内容两方面提高培训效率
  3. 080 matplolib模块
  4. .net remoting学习(3) ---配置与服务端广播
  5. 【转】2011年考研备战时间表
  6. wince中实现SQLite数据库及二进制文件保存与读取
  7. @retention注解作用_前端初学SpringBoot系列(三)自定义注解的学习与练习
  8. Mysql调试存储过程最简单的方法
  9. mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)
  10. 广东省汕头大学毕业设计论文撰写规范[2006]