第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。

从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。

第三,
pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。
contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>test</title>
</head>
<body>
我是个好人
</body>
</html>
会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。

至此,页面应为:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>中文问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</html>

第四,
request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
1,post提交的数据: 
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器. 
<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF8</param-value> 
</init-param> 
<init-param> 
<param-name>forceEncoding</param-name> 
<param-value>true</param-value> 
</init-param> 
</filter>

<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.html</url-pattern> 
</filter-mapping> 
<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.jsp</url-pattern> 
</filter-mapping>

因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.

特别注意: 
a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding); 
在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放. 
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/> 
这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过. 
如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal( [url]http://www.ethereal.com/[/url] )

2,get提交的数据: 
两种情况: 
a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用 
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK") 
取出 
b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的 
content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中: 
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> 
<Connector port="8080" 
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" acceptCount="100" 
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" 
disableUploadTimeout="true" />

加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容. 
如果content="text/html; charset=GBK",需用 
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK") 
取出,其他情况类似.

总结: 
1,所有页面使用utf8编码, 
2,服务器加上过滤器, 
3,server.xml中不要使用 
<Valve className="org.apache.catalina.valves.RequestDumperValve"/> 
4,server.xml文件加上useBodyEncodingForURI="true" 
这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求 
从这里输入.

第六,连接数据库

1、mysql配置文件:
修改mysql在windows\my.ini里default-character-set=utf-8

2、mysql里数据库和表也都设为utf8_unicode_ci

3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&

对于Web容器来说,如果你不设置,默认是ISO8859-1
String des = new String(s.getBytes("iso8859-1"),"UTF-8");都可以使用这个 不论哪里,有乱码就是用

springMVC乱码问题相关推荐

  1. JAVA_OA(五)(番外篇):SpringMVC乱码解决(post,get)

    get:字符转换: 1).xxx =new String(name.getBytes("iso8859-1"),"utf-8"); 2).web.html中&l ...

  2. springmvc 全局编码_Java SpringMVC乱码问题排查和解决

    Java是 Unicode 编码的,稍微不注意,就会出现乱码的问题,乱码的根本原因就是对文本进行编码的时候和解码的时候,所使用的编码字符集不一致导致的.像SpringMVC搭建的Web服务这类事,输入 ...

  3. 解决springmvc乱码问题

    最近用springmvc+mysql给公司写了一个办公软件,前台保存汉字到mysql正常显示,但读取数据库到前台时出现乱码,一堆问号,上网查说这不是乱码问题,几番波折最终解决,直接上代码: <! ...

  4. SSMSSH项目中 springmvc 乱码问题解决

    需要在web.xml文件中配置过滤器: <!-- 过滤器 过滤乱码 --><filter><filter-name>characterEncodingFilter& ...

  5. springMvc 乱码问题

    https://blog.csdn.net/kalision/article/details/46441081

  6. SpringMVC学习日记总结

    SpringMVC 1.回顾MVC 1.1.什么是MVC? MVC是模型,视图,控制器的简写,是一种软件设计规范 MVC主要作用是降低了视图与业务逻辑间的双向耦合 MVC不是设计模式,是架构模式 1. ...

  7. Spring、SpringMVC、SpringBoot及其插件学习笔记集合(持续更新中....)

    笔记目录 语言 1.MyBatis 1.1 普通用法 1.1.1 配置文件 1.1.2 mapper文件 1.2 通用mapper文件 2.Thymeleaf 2.1 命名空间 2.2 依赖 2.3 ...

  8. MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)

    第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...

  9. java乱码问题解决总结

    一.编码的基础概念 首先,要想解决java中文乱码问题就有必要了解一下什么是字符,字符集,编码的概念. 字符:是文字与符号的总称,包括文字.图形符号.数学符号等. 字符集:就是一组抽象字符的集合.字符 ...

最新文章

  1. dbcp 连接池参数说明
  2. 为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory
  3. CSDN在文章头部添加目录
  4. solr 启动时指定 solr.home
  5. Linux-C实现GPRS模块发送短信
  6. 【Python学习】 - sklearn学习 - 自带数据集sklearn.datasets.x
  7. 中国什么时候才能全面普及 1 Gbps 下行的网速?
  8. 工业时序大数据质量管理
  9. Laravel核心解读--Facades
  10. python之pymysql的使用
  11. 迅雷java_Java实现迅雷地址转成普通地址
  12. 中国移动手机支付开放平台网站服务协议
  13. IBM SPSS Modeler简单案例
  14. 海思3559a平台 MIPI YUV 驱动开发
  15. 243.STAMP图形界面微生物组分析软件
  16. 在BAT工作是什么样的?来听听在职员工们的说法
  17. ​微信小程序 获取地理位置(显示地图并显示经纬度)​
  18. linux查询socket资源,TCP的socket资源被耗尽的问题
  19. Redis——Redis事务性原理
  20. 计算机组成与设计ch3,计算机体系结构总结

热门文章

  1. python源代码-Python 源码深度剖析
  2. python实现http下载文件-Python HTTP下载文件并显示下载进度条功能的实现
  3. python语言学了有用吗-转行学习Python开发有什么优势
  4. python使用字典格式化字符串-4.2.3Python下字典的格式化字符串
  5. python利器怎么用-Python爬虫利器二之Beautiful Soup的用法
  6. python读取大文件-python读取大文件
  7. 以下用于数据存储领域的python第三方库是-Python 二级选择题
  8. python简单编程例子-python简单实例训练(21~30)
  9. python编程题-python编程练习题目
  10. python中文意思k-对python中的*args与**kwgs的含义与作用详解