多种中文乱码问题及解决:

1、jsp页面乱码解决(2步);
新建jsp页面;

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body> </body>
</html>
  • 习惯上,设置工程中设置项目默认编码为“UTF-8“;
  • 将新建的jsp页面的三处编码全部替换为与工程编码一致的“UTF-8”,其中,contentType中的charset是指服务器发送给客户端时的内容编码,pageEncoding是jsp文件本身的编码。

2、表单提交乱码解决(3步);
表单采用POST方法进行数据提交;

<form action="./submitBlog" method="post">
<div class="row">
<div class="col-lg-1"><h4>标题</h4></div>
<div class="col-lg-11"><input type="text" class="form-control" placeholder="标题" id="title" name="blogTitle"></div>
</div>
<br>
<textarea class="form-control" rows="20" id="content" name="content"></textarea>
<br>
<div style="float:right">
<button type="button" class="btn btn-success" id="submit_btn">提交</button>
<button type="button" class="btn btn-info" id="save_btn">保存</button>
</div>
</form>

对应的Controller中的处理方法;

     @RequestMapping(value="/submitBlog", method=RequestMethod.POST)
public String submitBlog(HttpServletRequest request, Blog blog){
//System.out.println("ContentType: "+request.getContentType());
//System.out.println("Request请求的编码格式为:"+request.getCharacterEncoding()); /*请求内容自动注入到blog中,并且能够正常显示*/ return "redirect:personalSpace";
}
未进行第三步之前,通过request.getCharacterEncoding()查看的HttpServletRequest的默认编码为null;

web.xml中设置过滤器,对每个URL请求进行编码转换;

<!-- 使用Filter进行编码转换 -->
<filter>
<filter-name>encodingFilter</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>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 不要使用/,使用/*代替才能够真正起作用,还需要配置在ContextLoaderListener后才能起作用 -->
</filter-mapping>

设置了针对请求的编码转换的Filter之后,再次通过request.getCharacterEncoding()查看HttpServletRequest的编码为"UTF-8";

查看CharacterEncodingFilter类的源码,可以看到;

 public class CharacterEncodingFilter extends OncePerRequestFilter {
/*设置Request请求要转换为的编码*/
private String encoding;
/*设置是否强制对Request和Response内容转码*/
private boolean forceEncoding = false;
/*其他方法*/
@Override
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException { if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
request.setCharacterEncoding(this.encoding);
if (this.forceEncoding) {
response.setCharacterEncoding(this.encoding);
}
}
filterChain.doFilter(request, response);
}
}

CharacterEncodingFilter的doFilterInternal方法由它的父类OncePerRequestFilter的doFilter方法进行调用,对HttpServletRequest、HttpServletResponse进行了编码转换。

3、URL中的中文参数注入到Controller对应方法的形参时乱码;
问题:

<a href="./editBlog?blogTitle=${blog.blogTitle}" style="color:black"><span class="glyphicon glyphicon-pencil"></span></a>

$(".delete").click(function(){
var url = "./deleteBlog?blogTitle="+$(this).attr("id"); //属性id中含中文 var temp = $(this).parents(".panel");//被删除的元素需要预先保留,否则已经删除的元素是无法获取其父元素的。 $.post(url, function(data, status){
if(status=="success"){
temp.fadeOut("slow");
}
});
});

通过上述两种方式提交的中文注入到Controller的对应方法时出现乱码。

解决方案

 @RequestMapping("/editBlog")
public String editBlog(HttpServletRequest request,@RequestParam("blogTitle")String blogTitle){
try {
blogTitle = new String(blogTitle.getBytes("ISO-8859-1"), "UTF-8"); //需要进行转码
} catch (UnsupportedEncodingException e) {
System.out.println("编码转换出错了!!!");
}
/*其他处理*/
}

不知为啥,注入到URL处理方法形参中的字符串采用ISO-8859-1编码,不过进行编码转换后,就正常了。

Spring+MyBatis实践—中文乱码的更多相关文章

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

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

  2. Spring+MyBatis实践—MyBatis数据库访问

    关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTempl ...

  3. Spring+MyBatis实践—工程配置

    初次实践:Spring+MyBatis技术搭建框架,采用Bootstrap前端开源框架. 简介: MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所 ...

  4. Spring MVC POST中文乱码解决方案

    spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码问题,具体配置如下: ...

  5. 【spring学习】中文乱码问题

    问题: 在这样的一个控制器中: 返回字符串中文部分全是问号. 解决方案: 在spring-mvc.xml文件中加入以下代码: <!-- 支持spring3.0新的mvc注解 ,解决json中的中 ...

  6. Spring RestTemplate 之中文乱码

    由于RestTemplate的默认构造方法初始化的StringHttpMessageConverter的默认字符集是ISO-8859-1,所以导致RestTemplate请求的响应内容会出现中文乱码. ...

  7. Spring @ResponseBody 返回中文乱码问题

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt102 今天在使用spring 的时候,发现中文返回的是乱码. 经过研究发现, ...

  8. 解决Spring框架下中文乱码的问题

    在使用了Spring框架下回发现很多表单交互的地方会发生乱码,而且写到数据库中也是乱码,这其实还是字符编码的问题,在我们还在用自己写的servlet的时候,直接在request和response加上字 ...

  9. spring boot + velocity中文乱码解决方式

    在application.properties文件中,加入如下配置: spring.velocity.properties.input.encoding=UTF-8spring.velocity.pr ...

随机推荐

  1. SQLSERVER2000使用TSQL将数据导入ACCESS并压缩生成rar

    查询分析器操作ACCESS数据表数据 (1)查询:select top 10 * from OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'C:\Documents an ...

  2. DOS批处理命令-echo

    Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置. 语法 echo [{on off}] [message]   即是说当echo设置off值 ...

  3. 第九篇、UITabbar增加类别用来标红点

    1.系统中只有设置bage的方式,设置为nil也是为一个红点,但是很大,并不是我们需要的 2.扩充标红点的方法 (常用于有新的动态提示标志) #import <UIKit/UIKit.h> ...

  4. 适配----Autolayout

    AutLayout 相对布局,根据参照视图的位置 来定义自己的位置.通过约束视图和视图之间的关系来分配屏幕上的位置,通常与VFL语言配合使用 VFL(visual format language)视觉 ...

  5. OC5_NSMutableString操作

    // // main.m // OC5_NSMutableString操作 // // Created by zhangxueming on 15/6/10. // Copyright (c) 201 ...

  6. 【HeadFirst设计模式】7.适配器模式与外观模式

    今晚学习完第七章,顺便做一下知识备忘. 适配器模模式: 定义:将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 对象适配器: 类适配器: 外观模式: 提供了一个统一 ...

  7. javascript中的sort()方法

    现在在学习javascript中,发现sort()函数是有点奇怪的东西(可能是本人水平的问题-_-!),于是就在这里记录一下自己找到的东西吧.sort()这个方法的参数很奇怪,必须是函数,但也是可选参 ...

  8. jQuery中模拟用户操作

    有时为了节省不想手动操作网页,但又想看到用户操作时的效果,可以用到jQuery提供的trigger方法.见下图代码 在不点击按钮时仍然想弹出this.value 我们只需要在后面加上.trigger( ...

  9. lnmp 虚拟主机配置及重写

    lnmp安装与调试,请看 http://www.cnblogs.com/lin3615/p/4376224.html 虚拟主机的配置编辑nginx配置文件 nginx.conf此为主配置文件 vim ...

  10. ACE 6.2.0 win7_64 编译

    Windows平台 ~ Microsoft Visual Studio 1)        下载ACE源码 ACE官方网址:http://www.cs.wustl.edu/~schmidt/ACE.h ...