`
xumingrencai
  • 浏览: 1177144 次
文章分类
社区版块
存档分类
最新评论

传递中文产生乱码的解决方式汇总

 
阅读更多

1 最基本的乱码问题。
这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。
<%@ 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文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件
,包括里面的汉字。
第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。也就
是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有
这一行的话,“我是个好人”也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系
。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致
浏览器混淆了编码格式。出现了乱码。
2 表单使用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
进行编码处理。这个网上有很多例子。请大家自己查阅。
3 表单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”来进行解码的。
4 上传文件时的乱码解决
上传文件时,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转码。已经能得到正常所有汉字以及字
符。
5 Java代码关于url请求,接受参数的乱码
url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。 如果设定了这个编码格式,则意味着所
有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱码,例如
一个链接 Response.sendDerect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用
String name");得到的就是乱码。因为规定了必须是utf-8才可以,所以,这个转向应该这样写:
Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);才可以。
如果不设置这个参数URIEncoding=”UTF-8”, 会怎么样呢? 不设置则就使用了缺省的编码格式
iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正常解析,如果使偶数
个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就能正常解析,但中文的标
点符号仍出现乱码。权宜之计,如果您的参数中没有中文标点符号,则可以在参数值最后加一个英文符
号来解决乱码问题,得到参数后再去掉这个最后面的符号。也可以凑或使用。
6 脚本代码关于url请求,接受到的参数乱码
脚本中也会进行页面转向的控制,也会涉及到附带参数,并在接受页面解析这个参数的情况。如果这个
汉字参数不进行URIEncoding=”UTF-8”所指定的编码处理,则接受页面接受到的汉字也是乱码。脚本
处理编码比较麻烦,必须有相应的编码脚本对应文件,然后调用脚本中的方法对汉字进行编码即可。
7 关于jsp在MyEclipse中打开的乱码问题
对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使用
的编码格式都是iso8859-1。所以导致jsp里面的汉字出现乱码。这个乱码比较容易解决,直接到
eclipse3.1的偏好设置里面找到general-〉edidor,设置为您的文件打开编码为utf-8即可。Eclipse会
自动重新以新的编码格式打开。汉字即可正常显示。
8 关于html页面在eclipse中打开出现乱码情况
由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。
一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可。

分享到:
评论

相关推荐

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    3.4.2 解决中文乱码 3.4.3 获取客户端数据 3.5 response回应对象的应用 3.5.1 HTTP头信息的操作 3.5.2 设置MIME类型 3.5 13页面重定向操作 3.6 Session会话对象的应用 3.6.1 session的生命周期 3.6.2 会话的创建与...

    Java Web应用详解.张丽(带详细书签).pdf

    11.3 Struts 开发中的中文乱码问题 11.4 Action 数据获取与传递 11.5 Struts 表单验证 第12章 标签库及其应用 12.1 Struts标签库基础知识 12.2 Struts标签库应用实例 12.3 JSTL基础知识 12.4 EL表达式基础...

    EXCEL集成工具箱V6.0

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    EXCEL集成工具箱V8.0完整增强版(精简)

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

    PHP程序开发范例宝典III

    实例222 使用聚集函数SUM对学生成绩进行汇总 344 实例223 使用聚集函数AVG求某班学生的平均成绩 346 实例224 使用聚集函数MIN求销售额、利润最少的商品 347 实例225 使用聚集函数MAX求月销售额完成最多的销售...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例057 用List集合传递学生信息 70 实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 ...

Global site tag (gtag.js) - Google Analytics