setCharacterEncoding 失效问题

weyer 发布于 2016/03/30 18:03
阅读 323
收藏 0

@jfinal

背景是用jfinal 的时候,之前都是ajax 提交表单,但今天特殊情况,要直接用表单提交,发现乱码。

检查了一些配置  

    1、tomcat 设置了编码UTF8(当然,对POST 好像没关系,图个心安)

    2、页面设置了

               <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

               <meta charset="UTF-8" />
               <meta http-equiv="content-type" content="text/html;charset=UTF-8" />

     3、项目是使用UTF-8编码

还是乱码,无果。于是乎写了个拦截器测试,如下


但是还是需要转码之后才能显示中文,请大神指示

加载中
0
JFinal
JFinal

    jfinal 默认的 encoding 是 "utf-8",所以在 web.xml 中添加 Filter,并再次设置 encoding必定会出问题,这个很久以前就被证实过。建议用如下方式解决:

1:去掉自建的 Filter

2:在 YourJFinalConfig.configConstant(Constants me) 中通过 me.setEncoding(...) 指定自己需要的 encodeing

3:设置 me.setDevMode(true),在客户端发送带中文的请求,看一下控制台输出的 jfinal action report 是否得到了正确的中文

4:如果仍未得到正确的中文,基本可以确定是客户端的字符集有问题,JSP 作为页面用一下:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

5:如果还未解决,终极方案是单步调试,看具体是哪一步操作出的乱码,第一个断点可以设置在 JFinalFilter.doFilter() 之中

JFinal
JFinal
回复 @lety : 那么可以将 ajaxAnywhere 的 filter 放在 jfinal filer 之后,然后为他们设置不同的 filter mapping
weyer
weyer
回复 @JFinal : 感谢。看了ajaxanywhere源码,里面在filter之前使用了request.getParameter 导致后面setCharacterEncoding失效
JFinal
JFinal
回复 @lety : 去掉 AjaxAnywhere 的 Filter 中的 setEncoding(...) 方法即可
weyer
weyer
回复 @JFinal : 但是 AjaxAnywhere 就用了不, 提示AjaxAnywhere error:content-type in not text/xml:[text/html;charset=UTF-8]
weyer
weyer
回复 @JFinal : 找到问题了 项目里面用到了AjaxAnywhere,如果把AjaxAnywhere放在JFinalFilter之前就会出现乱码, 放在JFinalFilter之后,就不会出现乱码 (200字限制,接下面)
下一页
返回顶部
顶部