就Java Web开发中文乱码问题讨论

来源:互联网 发布:it技能有哪些 编辑:程序博客网 时间:2024/06/04 19:19

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

一、基本的编码知识

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

  下面是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开发中文乱码现象进行了总结,希望对大家起到帮助作用。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 经典家庭伦txt丝母韵欲彩图 经典家庭伦txt丝母韵欲txt下载 经典家庭伦txt丝母韵欲d下载 经典家庭伦txt丝母韵欲视频 长篇都市情感小说 经典家庭伦全文 久九九久精品免费视频 91在线中文字幕香蕉人人视频 经典家庭伦txt岳丝母小丹韵欲阅读 碰超上线视频人人视频千人 91青青碰起上线视频人人 车里太挤姑妈坐我腿上做小说 经典家庭伦txt岳丝母小丹韵欲小说 我的丝母欲韵第六节 91在线中文久人人视频动漫 悉母全集动漫完整视频 类别中文动漫中的视频 腐母动漫全集视频时长 86 母汁视频动漫 久99久视频精品免费观看38 难以忍耐动漫视频中文 久九九久手机视频 乳娘家教动漫无删减在线播放 久99久精品视频只有精品 母恋人2017中文 久九九久视频精品6思思 巨母3动漫在线 久99久视频精品免费视频动漫 水柔姐大战儿子视频91 久九九久视频精品 99视频国内99视频在线观 横恋人母日语中字 玖玖视频热线视频大全 九九视频热线视频大全动漫 99ra视频这里只精品 九九久视频热线视频 九九久视频热线视频精品 九九视频本韩视频 9久9久女女视频精品mp4 久99久精品免费观看15 久99久只有视频精品18