在JAVA WEB开发的过程中,经常会遇到中文乱码的情况,中文乱码主要是在浏览器与服务器交互传递数据的时候发生的。对于这个棘手的问题,我参考(韩顺平老师)视频将处理方法总结与此,供自己以及大家开发的时候借鉴。

  一、发生中文乱码的三种情况

     (1)表单提交(form),其中又分为两种情况,post提交和get提交;

    (2)超链接传递参数,例如:www.cnblogs.com?postid=1234567;

    (3)sendRedirect()方法,重定向url带有参数的时候。

  二、乱码原因及处理方法

    (1)表单post提交乱码

      原因:web服务器默认采用的是ISO-8859-1的编码方式解析post数据,所以乱码出现是由于浏览器所传递数据编码方式与服务器接收编码方式不一致。

      处理方案:在servlet或jsp中加上 request.setCharacterEncoding("utf-8"); 这里假定浏览器所显示数据的编码格式是utf-8。

    (2)表单get提交乱码

       原因:同上一样,由于get提交的数据没有放在请求体内,而是放在请求行中,所以使用上面的方式不能解决

      处理方案:编写一个转码工具类,如下

 public class CodingTool {
public static String transcoding(String str) {
try {
return new String (str.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
}

    (3)超链接传参乱码情况和get提交乱码原因及解决方案都一样

     (4)sendRedirect()方法提交Url中参数出现乱码

      原因:sendRedirect()方法重定向时会先回到浏览器,再由浏览器向下一个servlet发送http请求,在第二次请求的servlet中根据post请求或get请求方式进行处理。

  三、特殊情况

    当客户端浏览器是ie6或以下版本的时候,使用超链接和sendRedirect()传参这两种情况任然会出现乱码(当中文是奇数的时候),解决方案有两种:

    (1)全面换成GBK编码,在servlet中这样进行接收:

        String username = new String (request.getParameter("username").getBytes("iso-8859-1"), "gbk")

    (2)仍然使用utf-8编码,就需要对要发送的中文进行URLEncoding

      在发送信息的servlet中,对含有中文的URI进行如下转码操作:

        String info = java.net.URLEncoder.encode("图片.jpg", "utf-8");

        然后使用超链接将info转发出去

        response.getWriter().println("<a href='/EncodingPro/Test1?imageName=" + info +"'>test</a>");

        或sendRedirect()方法:

        response.sendRedirect("/EncodingPro/Test1?imageName=" + info );

      接收方:

        String info = new String (request.getParameter("imageName").getBytes("iso-8859-1"), "utf-8");

      

J2EE中文乱码处理的更多相关文章

  1. j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法

    一.更改jdk默认编码为UTF-8,保证启动的JVM不会出现中文乱码问题 1.在编译的时候,如果我们没有用 -encoding 参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们 ...

  2. Oracle数据库中文乱码问题

    最近碰到Oracle乱码问题,刚开始甚是头疼,以前在合肥出差的时候,这种问题也碰到过,当时直接抛给了“乌压压一片”(一个搞数据的同事儿),这次没办法躲过,只好硬着头皮上.虽然我这次碰到的是Oracle ...

  3. 中文乱码的分析 和 从Eclipse设置启动JVM时的字符集(转)

    最近时常碰到中文乱码的问题,eclipse的编码环境设置的都是UTF-8,外部也是以UTF-8的编码进行传参的,但是遇到中文的时候还是因为乱码而产生一系列的错误.在网上查了许多资料,发现这是跟JVM的 ...

  4. redhat6.3 jfreechar中文乱码解决途径

    最近使用到jfreechar的项目,在转移到linux上面时出现中文乱码(中文被显示为框框),网上查了一些资料,结合自身系统的特性,总结了一种安装字体的方式.在说字体安装之前首先上个测试的代码吧:we ...

  5. jsp中文乱码解决办法

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

  6. java中文乱码解决之道(一)-----认识字符集

    沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...

  7. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  8. java中文乱码解决之道(九)-----总结

    乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...

  9. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

随机推荐

  1. 炼数成金hadoop视频干货04

    视频地址:http://pan.baidu.com/s/1dDEgKwD 这一节讲的全是理论 任务执行优化 : 1.推测式执行: 2.重用JVM: 3.忽略模式. 除了手动修改Log4J.proper ...

  2. css笔记07:通配符选择器

    通配符选择器: * { margin:10px ;//默认四个位置参数全为零 margin-top:10px;//分别设置四个参数 margin-left:10px; margin-right:0px ...

  3. EXTJS 常用控件的使用

    重要按钮配置项 handler: renderTo: 取得控件及其值 var memo = form.findById('memo');//取得输入控件 alert(memo.getValue()); ...

  4. Java操作Wrod文档的工具类

    需要有jacob的jar包支持 import java.util.Iterator; import java.util.List; import java.util.HashMap; import c ...

  5. Redis中的关系查询(范围查询,模糊查询等...)

    本文部分转自于:http://blog.csdn.net/dc_726/article/details/42784317 本文对Redis如何保存关系型数据,以及如何对其匹配.范围.模糊查询进行举例讲 ...

  6. 一个把List<String>转化为以","隔开的字符串的方法

    import java.util.ArrayList; import java.util.List; /** * 集合操作 * @author intrl * @date 2010-12-15 * @ ...

  7. 关于VMware桥接的注意事项

    VMware 使用桥接  想固定住虚拟机的IP的同时还可以访问外网. 通过Linux的可视化操作界面固定设置IP,网关,子网掩码等配置信息,如下图: 附录本地Windows中的IP地址信息: 虚拟机和 ...

  8. 关于启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!

  9. [未完成]关于CSS的总结

    CSS和html 数据和样式分离,在java中称为降低了耦合性. css和html相结合的第一种方式. 1,每一个html标签中都有一个style样式属性.该属性的值就是css代码. 2,使用styl ...

  10. 7月15日学习之BOM

    setTimeout() //延时器,只执行一次代码 clearTimeout() //清除演示器 setIntervla() //定时器,根据指定时间间隔执行一次代码 clearInterval() ...