`
qinjingkai
  • 浏览: 259660 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

编码问题总结(Jsp部分)

阅读更多

在web开发中,乱码的问题始终是个比较棘手的问题,经过积累现在整理如下:


最基本的乱码问题
这个乱码问题是最简单的乱码问题。一般新手会出现。就是页面编码不一致导致的乱码。
Html代码:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=iso8859-1"%> <html> <head> <title>中文问题</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> </head> <body> 我是个好人 </body> </html>


三个地方的编码
第一个地方的编码格式为jsp文件的存储格式。Ecljpse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没 有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,“我是个好人”也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。
表单使用Post方式提交后接收到的乱码问题
这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式, 则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
a. 接受参数时进行编码转换

String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;


这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
b. 在请求页面上开始处,执行请求的编码代码

request.setCharacterEncoding("UTF-8")


把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用

String str = request.getParameter("something");


即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。
c. 为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。


表单get提交方式的乱码处理方式
如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码/、。
解决办法:
a. 使用上例中的第一种方式,对接受到的字符进行解码,再转码。
b. Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的 Connector节点增加useBodyEncodingForURI="true"属性配置,即可控制tomcat对get方式的汉字编码方式,上面 这个属性控制get提交也是用request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为 utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据

<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"disableUploadTimeout="true" URIEncoding=”UTF-8”/>

里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。

如果应用服务器用的是weblogic,只需要在站点的web.xml中配置一行如下的代码即可
<context-param>
          <param-name>weblogic.httpd.inputCharset./*</param-name>
          <param-value>GBK</param-value>
  </context-param>


上传文件时的乱码解决
上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传 组件,会发现有很多乱码想象。这是因为apach的先期commons-fileupload.jar有bug,取出汉字后进行解码,因为这种方式提交, 编码又自动使用的是tomcat缺省编码格式iso-8859-1。但出现的乱码问题是:句号,逗号,等特殊符号变成了乱码,汉字如果数量为奇数,则会出 现乱码,偶数则解析正常。
解决方式:
下载commons-fileupload-1.1.1.jar 这个版本的jar已经解决了这些bug。但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以及字符。
Java代码关于url请求,接受参数的乱码
url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。如果设定了这个编码格式,则意味着所有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱码,例如一个链接:

Response.sendDerect(“/a.jsp?name=张大维”);
而在a.jsp里面直接使用

String name = request.getParameter("name");
得到的就是乱码。因为规定了必须是utf-8才可以,所以,这个转向应该这样写:

Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);

才可以。
如果不设置这个参数URIEncoding=”UTF-8”,会怎么样呢? 不设置则就使用了缺省的编码格式iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正常解析,如果使偶数个数,得到最后字 符就是乱码。还有就是如果最后一个字符如果是英文,则就能正常解析,但中文的标点符号仍出现乱码。权宜之计,如果您的参数中没有中文标点符号,则可以在参 数值最后加一个英文符号来解决乱码问题,得到参数后再去掉这个最后面的符号。也可以凑或使用。
脚本代码关于url请求,接受到的参数乱码
脚本中也会进行页面转向的控制,也会涉及到附带参数,并在接受页面解析这个参数的情况。如果这个汉字参数不进行URIEncoding=”UTF-8”所 指定的编码处理,则接受页面接受到的汉字也是乱码。脚本处理编码比较麻烦,必须有相应的编码脚本对应文件,然后调用脚本中的方法对汉字进行编码即可。
关于jsp在MyEclipse中打开的乱码问题
对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使用的编码格式都是iso8859-1。所以导 致jsp里面的汉字出现乱码。这个乱码比较容易解决,直接到eclipse3.1的偏好设置里面找到general-〉edidor,设置为您的文件打开 编码为utf-8即可。Eclipse会自动重新以新的编码格式打开。汉字即可正常显示。
关于html页面在eclipse中打开出现乱码情况
由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可。

参考文章:http://hi.baidu.com/zjphzxg/blog/item/ed851bcf897e1635f9dc611e.html
分享到:
评论

相关推荐

    网页教程《跟姐姐学JSP》

    3.4. forward和redirect的问题 3.4.1. 绝对路径与相对路径 3.4.1.1. 相对路径 3.4.1.2. 绝对路径 3.4.2. forward导致找不到图片 4. 四个作用域 4.1. 何为作用域 4.2. 例子:在线列表 5. 结合javabean实现CRUD ...

    基于Jsp的图书馆管理系统软件设计源码+数据库+sql+毕业论文文档资料.zip

    第四章为程序设计与编码各主要功能模块的实现方法和部分关键代码。 第五章是软件测试,测试系统功能实现并对测试结果进行记录分析 第六章为结束语,为此次毕业设计做一个总结,总结所获得的经验和体会。 第二章 ...

    Java EE 编码规范.docx

    2、注释哪些部分 5 3、注释格式 5 四、代码格式规范 5 五、其他规范 6 六、工程特有命名规范 6 1、持久层 6 2、服务层 6 3、MVC 层 7 4、Spring 配置文件 7 5、JSP 文件 7 七、应用命名总结 7 1、 java类 8 2、 字段...

    基于Jsp+Servlet+MySQL实现的会员管理系统源码+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、...通过在短短一周实训时间开发完成了该项目,提高了快速定位并解决问题的能力,掌握了使用Java技术进行web开发的相关知识。

    Jsp图书馆管理系统软件设计(软件源码++数据库+sql本科毕业论文WORD文档资料).zip

    第四章为程序设计与编码各主要功能模块的实现方法和部分关键代码。 第五章是软件测试,测试系统功能实现并对测试结果进行记录分析 第六章为结束语,为此次毕业设计做一个总结,总结所获得的经验和体会。 第二章 ...

    java 面试题 总结

    抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性...

    Member:基于Jsp + Servlet + MySQL的会员管理系统

    ###部分演示 ###开发周期每周###负责模块此项目由2个开发人员参与开发,本人负责Java编码以及使用EasyUI进行界面的构建和开发。 ###总结与收获通过在短短一周实训时间开发完成了该项目,提高了快速定位并解决问题的...

    解决idea开发遇到javascript动态添加html元素时中文乱码的问题

    在网上看了很多博客,总结到最后就是要把tomcat、jsp、js、servlet的编码格式统一即可,但是我确定我早就将编码统一为utf-8 包括JavaScript文件的编码格式也多次重写为其他编码格式然后再次重写为utf-8,依然不行 ...

    jpivot学习总结.doc

    这个动作还依赖于该标签的 sessionParam 属性,如果该属性存在,那么参数值将在页面显示之前写到 com.tonbeller.jpivot.param.SessionParamPool 当中,如果不存在该属性,参数将会被编码到超链接当中。 例如: ...

    图书馆管理系统(Java) 优秀毕业设计论文+软件设计源码.zip

    第四章为程序设计与编码各主要功能模块的实现方法和部分关键代码,同时提供了个主要界面运行的参考图片,以更直观了解系统的实现情况。 第五章是软件测试,测试系统功能实现并对测试结果进行记录分析 第六章为结束语...

    freemarker总结

    include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下: [options]&gt; 在上面的语法格式中,两个参数的解释如下: filename:该参数指定被包含的模板文件 options:该参数可以省略,指定...

    Java面试宝典2010版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    spring security 参考手册中文版

    8.1问题跟踪 72 8.2成为参与 73 8.3更多信息 73 第二部分 架构与实现 73 9.技术概述 73 9.1运行环境 73 9.2核心组件 74 9.2.1 SecurityContextHolder,SecurityContext和认证对象 74 获取有关当前用户的信息 75 ...

    ssh(structs,spring,hibernate)框架中的上传下载

    WEB-INF下的applicationContext.xml为Spring的配置文件,struts-config.xml为Struts的配置文件,file-upload.jsp为文件上传页面,file-list.jsp为文件列表页面。  本文后面的章节将从数据持久层->业务层->Web层的...

    Spring面试题

    在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来)。 我用开启在线信用帐户的用例作为起点。对于该实现,...

    Xarm 1.0

    (实际工作量为3750个,《专项研究》部分保留给团队队员。) &lt;br&gt;07. Xarm提供WM6.0全部DLL的函数列表。(总共有424个DLL文件,有300多个有API函数。) &lt;br&gt;08. Xarm提供了COM API函数、COM接口及方法的定义...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

     本文共分五大部分。分别是XML快速入门,XML的概念,XML的术语,XML的实现,XML的实例分析。最后附录介绍了XML的相关资源。作者站在普通网页设计人员的角度,用平实生动的语言,向您讲述XML的方方面面,帮助你拨开...

    springmybatis

    3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) ...

    网管教程 从入门到精通软件篇.txt

    小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。  Bootcfg  bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。  含有下列参数的 bootcfg 命令仅在...

Global site tag (gtag.js) - Google Analytics