下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

为Java Web开发中文乱码问题支招

作者:课课家教育the     来源: http://www.kokojia.com点击数:1087发布时间: 2017-05-10 09:28:13

标签: Java Web开发编码设置中文乱码

大神带你学编程,欢迎选课

  我们在生活中会遇到种种问题,但是我们都会尝试着去解决它并从中获取经验;在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;在java Web开发中也一样,小编整理出了一份关于javaweb开发中文乱码的解决方案。接下来,大家就一起来看看吧!

  一、基本的编码知识

  首先,这篇字符编码笔记是每个初学者必读的,这样才能更好的了解和解决Java Web开发中的问题。

  下面是jsp的三次编码的三个阶段:

  第一阶段:JVM将.jsp文件编译为.java文件。在这个过程中pageEncoding就起到作用了,JVM先读取pageEncoding的值,根据该值去读取.jsp文件,然后由指定的编码方案生成UTF-8的.java文件。

为Java Web开发中文乱码问题支招_Java Web开发_编码设置_中文乱码_课课家教育

  第二阶段:JVM将.java文件转换为.class文件,从UTF-8至UTF-8。这个过程就与任何编码的设置都没有关系了,不管JSP采用了什么样的编码格式都将无效。经过这个阶段后.java文件就转换成了统一的UTF-8编码的.class文件了。

  第三阶段:服务器将处理的结果返回给浏览器,也称为业务逻辑处理后输出。这个阶段则依靠contentType的charset,如果设置了charset则浏览器就会使用指定的编码格式进行解码,否则采用默认的ISO-8859-1编码格式进行解码处理。

第三阶段:服务器将处理的结果返回给浏览器,这个阶段则依靠contentType的charset,如果设置了charset则浏览器就会使用指定的编码格式进行解码,否则采用默认的ISO-8859-1编码格式进行解码处理

  除了上面的三个阶段,jsp中的编码设置也尤其重要。

     使用该值对服务器响应进行重新编码,即jsp的输出流在浏览器中显示的编码;对表单get和post请求数据编码;上文中第一阶段,使用该值去读取jsp文件(不是主要作用)。

代码

      上文中第一阶段,使用该值去读取jsp文件,为避免中文乱码,跟jsp文件编码一致;对服务器响应进行重新编码,即jsp的输出流在浏览器中显示的编码(不是主要作用)。

代码

  网页的编码信息,说明页面制作所使用的编码。

代码

  可用在servlet和jsp页面中,作用是设置对客户端请求进行重新编码的编码,即post方式提交的数据进行编码。

  可用在servlet和jsp页面中,作用是设置对客户端请求进行重新编码的编码,即post方式提交的数据进行编码。

  注意:上文1,2,3中有部分功能是一样的,是有优先级的,在读取jsp文件时,1>2;在对服务器响应进行编码的时候,2>1>3,一般情况下,1,2都写。

  http请求默认以”ISO-8859-1”的编码来传送URL的。

     了解完基本知识后,Java中的中文乱码是个很头痛的问题。在Web开发中尤为凸显,明明在页面中输入的是中文,为什么在数据库中保存的却是不是中文,而是我们看不懂的文字。用程序中专业的术语来说,是乱码,不是我们所想要的结果。那么这个问题应该怎么来解决呢?,为了统一页面中不会出现中文乱码问题,接下来小编就来支招了!

  二、中文乱码的几种情况及最简单的解决方案:

  ①调用jsp页面中文显示乱码:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码。

  ②调用servlet页面显示乱码: 通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码。

      ③post表单传递参数乱码:通过jsp,html,或servlet中的表单元素把参数提交给对应的jsp或者servlet时,在接收的jsp或servlet中接收到的参数中文显示乱码。

  中文的编码方式取决于浏览器,chrome为UTF-8,IE为GB2312,这是由于浏览器并没有遵循URI编码规范。有以下解决方法:

  1.开发过程中,我们可以将查询字符串提前编码。tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的。所以我们从后台接收的时候要注意。采用相同的格式去接收(ISO-8859-1),然后用能解析的编码(utf-8)去转换。这样我们就能得到能兼容中文的格式了。这样处理之后发往前台。注意:发往前台的时候也需要设置一下

  2.在Servlet的doGet方法中添加,如下图:

2.在Servlet的doGet方法中添加,如下图:

  3.表单中的get和post数据包含中文

  三、原理

     我们知道产生乱码的原因是因为不同的编码造成的,这就好比你和一个印地安人在说话,假设你完全不懂印第安语,而对方也不懂汉语,那你们所说的话,就会在对方的脑子里产生一个个的问号。那么怎么办呢?通常的做法,就是找一个翻译,在java中,对编码也是这样的,

  我们通过上面的方法可以解决乱码问题,那么下面就来讲讲原理:

  客户端发到服务器的数据需要在客户端进行编码,类似于:StringparameterName="中国".getBytes("UTF-8")然后将编码后的数据发到服务器。

  客户端接受数据,request.getParameter(“”)的作用就是对接收到的数据进行解码,默认使用ISO-8859-1进行解码,可以使用request.setCharacterEncoding(“”)进行设置,但仅对post有用。假如我们使用默认的ISO-8859-1,肯定乱码,因为编码跟解码不一致,那此时怎么办呢,引出了上文中的两种解决方案:使用request.setCharacterEncoding(“”)改变request.getParameter(“”)的解码方式或者newString(request.getParameter("parameterName").getBytes("ISO-8859-1"),"charset的值")将request.getParameter(“”)解码的数据重新编码再解码。

  四、其他

  在jsp中的页面使用response.setContentType()等设置字符集会破坏jsp容器自身的页面编码,会引起html中字符乱码,脚本不会乱,所以建议不要设置。在开发中多采用page指令设置字符集。

在jsp中的页面使用response.setContentType()等设置字符集会破坏jsp容器自身的页面编码,会引起html中字符乱码,脚本不会乱,所以建议不要设置。在开发中多采用page指令设置字符集。

  小编结语:

      在学习基本知识时,也学习了一下解决中文乱码问题的方法。即是在Servlet的doPost()或者doGet()方法中,增加一句request.setCharacterEncoding("GBK"); 的代码即可。不过,个人认为这种方法不可取,在稍有点规模的项目中,有很多Servlet,只要有添加功能的Servlet,就要写这句代码,那么意味着要写很多重复的代码,这也违反了Java的开闭原则。在此时,建议使用过滤器,这样需写一次代码就解决了乱码问题。对比一下,你会选择哪一种呢???

     文章对JavaWeb开发中文乱码现象进行了总结,希望对大家起到帮助作用,如果有其他问题,各位可以在课课家教育进行咨询,或者搜索服务号【课课家】以及公众号【课课家IT精品课程】关注我们,课课家教育将会带着所有人一起学习进步!

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程