1:表单提交controller获得中文参数后乱码解决方案

注意: jsp页面编码设置为UTF-8

form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  1. <form action="${ctx}/user/addUser" name="userForm" method="post">

修改web.xml,增加编码过滤器,如下(注意,需要设置forceEncoding参数值为true)

注意:

数据库编码是否支持中文

数据库表和表字段是否正确

在配置连接数据库的参数设置修改:

  1. <property name="url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8"></property>

jsp页面中文输入,到controller乱码,这时候需要设置的是在web.xml文件中添加一个编码的过滤器(filter)将编码统一为UTF-8,代码如下:

01.<filter>
02.<filter-name>CharacterEncodingFilter</filter-name>
03.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
04.<init-param>
05.<param-name>encoding</param-name>
06.<param-value>utf-8</param-value>
07.</init-param>
08.</filter>
09.<filter-mapping>
10.<filter-name>CharacterEncodingFilter</filter-name>
11.<url-pattern>/*</url-pattern>
12.</filter-mapping>

这里需要注意的是,最好把这段代码放在web.xml中开头的位置,因为拦截有顺序,如果放在后面的话容易拦截不到。

数据库中文数据,jsp页面显示乱码(不是严格意义上的乱码,而是以问号的形式呈现)

1.response.setContentType("application/json;charset=UTF-8");//防止数据传递乱码

写上这句话就不会再出现乱码了。

第三种情况:

这个问题困扰了我一段时间,开始觉得数据库的编码格式不正确,重新创建了编码格式为utf-8的数据库也还是不可以,最后觉得是jboss的问题,我们的服务器用的是jboss,上网查了资料在连接数据源的时候加上编码格式就可以了,代码如下:

01.<datasource
jta=
"true" jndi-name="java:jboss/datasources/JcMysqlDS" pool-name="JcMysqlDS" enabled="true" use-java-context="true">
02.<connection-url>jdbc:mysql://192.168.24.46/ITOO_BASIC_BASIC?useUnicode=true&characterEncoding=UTF-8</connection-url>
03.<driver>mysql</driver>
04.<pool>
05.<prefill>false</prefill>
06.<use-strict-min>false</use-strict-min>
07.<flush-strategy>FailingConnectionOnly</flush-strategy>
08.</pool>
09.<security>
10.<user-name>root</user-name>
11.<pass<a
href=
"http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>>123456</pass<a
href=
"http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>>
12.</security>
13.</datasource>


1.页面乱码

页面相对是最为容易解决的,往往是在相应的jsp页面或者html页面设置相关的字符集即可。如

1
2
<%@page language="java"
contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

2.传值乱码

在传值过程中,也是乱码出现的频繁地。先不说到底是什么场景了,通常常用的方案有如下几个

配置指定的filter

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码-->
    <filter>
      <filter-name>springUtf8Encoding</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
       </init-param>
       <init-param>
          <param-name>forceEncoding</param-name>
          <param-value>true</param-value>
       </init-param>
    </filter>

设置request字符集

往往从前台传入到对应的controller或者是action之后出现乱码,讲讲我一般的思路是先打印request本身默认的字符集

1
i:System.out.println(request.getCharacterEncoding());

接着按照情况,如果打印的不是所需要的字符集则设置相应字符集即可

1
ii:request.setCharacterEncoding("UTF-8");

当然某种情况可能还是无法解决这时候用以下这个即可

1
String str=newString((request.getParameter("bigQuestionTypeName")).getBytes("iso-8859-1"),"utf-8")

3.存入数据库乱码

这个相对就比较复杂,这里lz用的mysql,且以mysql来介绍如何来解决这个乱码问题

大家都知道,无论是底层使用的是纯粹的jdbc还是hibernate还是jpa都好,其实本质上都是jdbc,对应的框架只不过在相关的基础上进行特定的封装。所以无论是什么样的技术,都会用到连接到数据库的url。所以url首先是需要检查的

1.url

标准情况会在相应的后面加上相应的字符集设置,如下

1
jdbcUrl                =jdbc:mysql:///itcastoa?useUnicode=true&characterEncoding=UTF-8

如上,useUnicode就不用说了,连接数据库中设置的字符集,&amp这是什么的?这就有问题了,在xml中&amp
是&的转义字符。如果你是用xml来配置对应的数据库连接配置的话就什么问题了。但是如果用的是**.properties就有问题了,则必须将
amp除去即可。这个确实是lz经历了头破血流的经验啊。

2.数据库

这里的问题也是相对比较难处理的,登录数据库

i:查看数据库编码格式

<img width="576" height="378" style="width: 630px; height:
413.52px; display: inline;"
alt="计算机生成了可选文字:夕sql>useitcastoaatabasechanged夕sql二status夕sqlUer14。
14Distribs。6。19,forUin64onnectionid:u犷犷
entdatabase:LtrrentLtser:SL:singdelimiteP:e护ue护ue护sion:rotocolve犷
sion:onnection:e犷uercha犷acterset:bcharacterset:lientcha护acte护set:onn。cha
护acte护set:CPport:ptine:1itcastoarootelocal卜ostHotinuse;5。6。19H夕SQLCo。。
unit夕Seruer1日localhostviaTCP/IPlatinlUtfsgbkgbk33日
61hour51oin4?sechPeads:S:6日1Questions:7que护iesPe护second510讨querie忍:日
opens:"

src="http://www.2cto.com/uploadfile/Collfiles/20150302/20150302094234206.png"
7plu忍htahle忍:1opentablaug:日。日日1夕sql>"="">

可以看到server的字符集还是latin1,这里就需要讲一下常用的字符集了。

为了世界的和平和繁荣昌盛,ISO组织指定了一套unicode字符集方案,Unicode编码是不同编码之间相互交流转换的桥梁,包含了32位二进制,所以能容纳2的31次方的字符,有生之年是够用了。而根据不同的需要Unicode又分为三种方案。

Utf8:用以解决国际上不同语言而出现的编码。对英文是使用8位,中文则为3位。可以在任何支持utf9字符集的浏览器上显示,无需另行处理。

另外两种为utf16和32,这里不再编著。大家自行查阅即可,总的还是因为存储和使用的方便来决定使用哪种。

好了,另外相对熟悉的就是gbk,俗称国标码,中国国家标准来制定,仅仅包含中文字符。所以相对两讲,utf8的兼容更好,但是存储量更大。

马上回来,大致对字符集充了电还是回来先解决问题。这里所以用gbk或者utf8都是可以的。但是latin1肯定是不可以的,这里主要通过这样一个命令来设置

分别设置设置了服务器、数据库和数据表部分的编码,必须设置连接编码。连接编码设置如下:

mysql> SET character_set_client='gbk';

mysql> SET character_set_connection='gbk'

mysql> SET character_set_results='gbk'

设置好编码,下面便可以成功插入中文了,其实用一句话即可解决

常用命令

查看数据库编码格式

show variables like 'character_set_%';

查看数据库中的表的创建

show create table tablename;

设置数据库编码格式

setnames 'gbk';

彻底解决Spring MVC 中文乱码 问题的更多相关文章

  1. 解决Spring MVC中文乱码

    在web.xml中设置编码过滤器 <filter> <filter-name>characterEncodingFilter</filter-name> <f ...

  2. spring mvc 中文乱码 post与get的方法解决

    spring mvc表单提交中文参数乱码问题 今天测试spring mvc  ,中文乱码,在web.xml中加上 <filter> <filter-name>encodingF ...

  3. Spring MVC 中文乱码的解决

    对于POST方法提交的中文乱码 , 可在web.xml中添加如下代码 : <filter> <filter-name>encodingFilter</filter-nam ...

  4. spring MVC中文乱码相关总结

    总结几种方式,都使用的话能解决大多数乱码的情况 1.所有页面使用 <%@page language="java" pageEncoding="UTF-8" ...

  5. 解决spring boot中文乱码问题

    在开发或学习当中,我们不可避免的会碰到中文乱码的问题(好想哭,但还是要保持微笑!) 今天,在学习spring boot中碰到了中文乱码问题. 首先,看了一下workspace是不是设置utf-8默认字 ...

  6. (转)spring mvc 中文乱码问题解决

    在eclipse环境里,页面传输数据的时候通常用ISO-8859-1这个字符集可以用 str = new String(str.getBytes("ISO-8859-1"), &q ...

  7. Spring Boot 中文乱码问题解决方案汇总

    使用 Spring Boot 开发,对外开发接口供调用,传入参数中有中文,出现中文乱码,查了好多资料,总结解决方法如下: 第一步,约定传参编码格式 不管是使用httpclient,还是okhttp,都 ...

  8. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  9. 教你解决Sublime Text中文乱码问题

    教你解决Sublime Text中文乱码问题[转载自成长的企鹅]       Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...

随机推荐

  1. hadoop2.2.0伪分布式搭建2--安装JDK

    2.1上传FileZilla 上传 https://filezilla-project.org/ 2.2解压jdk #创建文件夹 mkdir /usr/java #解压 tar -zxvf jdk-7 ...

  2. HTML5中的SVG

    * SVG * 基本内容 * SVG并不属于HTML5专有内容 * HTML5提供有关SVG原生的内容 * 在HTML5出现之前,就有SVG内容 * SVG,简单来说就是矢量图 * SVG文件的扩展名 ...

  3. WPF下递归生成树形数据绑定到TreeView上

    最终效果图:(用于学习类的效果 图片丑了点,看官莫怪) 新建窗体 然后在前端适当位置插入如下代码: <TreeView x:Name="> <TreeView.ItemTe ...

  4. 收集oracle统计信息

    优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...

  5. MySQL数据库的基本数据类型

    整数类型 数值型数据类型主要用来存储数字,包含的类型有: TINYINT.SMALLINT.MEDIUMINT. INT(INTEGER). BIGINT. 下面通过一个例子来查看各种类型的所占有的数 ...

  6. 新著作计划:《水利水电工程施工导流 水力计算与.NET编程》

    目   录 第一篇 基础理论篇 第1章 施工导截流设计概述 第2章 基本水力计算 2.1 临界水深计算 2.2 正常水深计算 2.3 堰流水力计算 2.4 明渠流水力计算 2.5 管流水力计算 第3章 ...

  7. Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"

    Article ID: 939308 - View products that this article applies to. Expand all | Collapse all Symptoms ...

  8. HBase权威指南环境配置

    出处:http://wuyudong.com/1958.html 系统采用ubuntu-14.04,64bit 1.安装git sudo apt-get install git 出现下面错误:Err ...

  9. Swift面向对象基础(上)——Swift中的枚举

    Swift中枚举 学习笔记来自<极客学院> import Foundation /**********1*Swift定义枚举的语法格式*************/ /* enum 枚举名 ...

  10. python yield

    http://www.jb51.net/article/15717.htm  这里还不错 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist) ...