简单翻了一下记录,我已经写了至少4篇关于编码和乱码的博客了,每次都觉得自己懂了。

实际上,这次的遭遇证明了“真懂”是一种很难达到的境界,吾辈仍需努力!

一、背景是这样子的:

.一个J2EE项目。
.项目的.java文件编码设置为utf-。
.项目的.jsp文件编码设置为utf-。

事实上以上设置和程序运行过程中动态产生的编码和乱码没有关系。

二、乱码来了:

.jsp调用ajax,以POST的方式向控制层传参数(有中文)。
.ajax提交数据的编码方式为utf-。
.SpringMVC的接收数据的编码方式为utf-。

然而从控制层打印出来的中文编码显示其为gbk编码!

三、判断:

.抓HTTP请求的数据包,确认浏览器发出来的数据编码是utf-。
.用HttpServletRequest取二进制码流,确认此时收到的数据编码是utf-。
.为啥用SpringMVC的注解 @RequestBody一格式化,就变成gbk了呢?

所有的注意力都成功的被SpringMVC误导过去了,各种检查自己的SpringMVC的配置。确认自己的配置没有问题。

四、还有谁?

还有tomcat!也许确切的说,还有tomcat的servlet!

在SpringMVC处理之前,是tomcat先接收的码流。检查tomcat的编码,确实是gbk。

想起来了,之所以这么头疼,是因为以前的tomcat默认编码是iso-8859-1,而这个可以很轻松的转成utf-8,而gbk不能!

五、解决:

在catalina.bat的最前面加入set JAVA_OPTS=-Dfile.encoding=UTF-

大多数的纠结,往往换了都是简单的配置,或者非常不起眼的一行代码。

这也许就是于细微之中见功力?学海无涯……

又见JavaWeb的中文乱码的更多相关文章

  1. Javaweb项目中文乱码

    Javaweb项目中文乱码 一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat: ...

  2. JavaWeb请求中文乱码

    解决中文乱麻问题,页面端发出的数据作两次encodeURI var name="张三"; encodeURI(encodeURI(name)); 后台解码: URLDecoder. ...

  3. JavaWeb项目中文乱码问题

    1.从浏览器读数据乱码(post 请求方式) 前提是前端页面是UTF-8编码,因为服务器端默认采用ISO解码,所以乱码,在读取前加上: request.setCharacterEncoding(&qu ...

  4. JavaWeb解决中文乱码

    1.Get请求,方案有两种 A:修改Tomcat配置文件 server.xml   URIEncoding="UTF-8" 如:<Connector port="8 ...

  5. java中文乱码分析整理

    在JavaWeb应用开发中,经常会出现页面中本该显示中文的地方却是乱码的情况.究其原因,主要是由于在Web组件之间.或Web组件与浏览器.与数据库所使用的字符集标准不统一,Web应用程序运行过程中,中 ...

  6. JavaWeb——Get、Post请求中文乱码问题

    最近在重温JavaWeb基础内容,碰到了之前也时常遇到的中文乱码问题,想着反正是经常要处理的,不如当即就把它整理出来放在博客里,省得遇到时再去到处搜. 1. Post请求乱码的解决方案: 手工创建一个 ...

  7. JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码

    JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码 准备条件:一个创建好的 JavaWeb 项目 步骤: 1.创建一个类并实现 Filter 接口 import javax.ser ...

  8. javaweb回顾第十一篇过滤器(附实现中文乱码问题)

    1:过滤器概念 过滤器就是一种在请求目标资源的中间组件,比喻把污水转换成纯净水中间需要一个污水净化设备,那么这个设备就好比一个过滤器.那么我用图来表示过滤器(可以有多个过滤器)运行的过程 2:Filt ...

  9. JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题

    本文主要讲springMVC中视图和控制器之间常用的两种传递参数的方式: 1.JQuery 2.JSON 一.JQuery方式 思路:单击按钮后,触发JQuery事件,而提交整个表单 JSP中 < ...

随机推荐

  1. DHTML概述

    <!-- DHTML概述:动态的HTML.不是一门语言,是多项技术综合体的简称. 其中包含了HTML.CSS.DOM.JavaScript. 这四个技术在动态HTML页面效果定义时,都处于什么样 ...

  2. cordova-sqlite-plugin常用数据库操作

    ionic项目需要做本地缓存,研究了一番,总结出了常用的数据库操作: 1.新建数据库,用angularJS+ionic: //声明一个数据库对象 var db = null; //事件devicere ...

  3. C使用相关笔记

    #将c文件编译成动态库 //hello.c int hello_add(int a, int b) { return a + b; } gcc -O -c -fPIC -o hello.o hello ...

  4. book

    http://www.ed2000.com/ShowFile.asp?FileID=61391 e-itbook.com

  5. 一种javascript链式多重继承的方式(__proto__原型链)

    var a=function(){this.foo='bar';} a.prototype={b:1}; var aa=function(){} aa.prototype={c:2,__proto__ ...

  6. Apply 与 Call 的用法(简化版)

    Javascript中Apply 与 Call 的用法,这里只作简单的入门说明 function human( name, age ){ this.name = name; this.age = ag ...

  7. redis 自启动

    第一步: 在/etc/init.d/目录下建立一个名字为 redis 的启动脚本 cd /etc/init.d touch redis 然后在这个脚本中添加如下脚本  <注意修改自己的PIDFI ...

  8. java工具类目录

    1 读取properties文件数据 http://www.cnblogs.com/xumin/p/3143762.html 2 发送邮件 3 发送短信 4

  9. 自定义 导航条分割线,tabBar分割线颜色(或者是 去掉)

    UIView * lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bgView.frame.size.width, 0.5)]; l ...

  10. 转载 Servlet3.0中使用注解配置Servle

    转载地址:http://www.108js.com/article/article10/a0021.html?id=1496 开发Servlet3的程序需要一定的环境支持.Servlet3是Java ...