jquery post 乱码 提交到struts2 中文乱码 很多方法都试过了..采用的都是utf-8

jquery里也加了编码设置为utf-8,encodeURIComponent也用了唯一没改的就是tomcat里的编码了过滤器也设置了还是各种乱码... jquery 里也加了编码设置为utf-8,encodeURIComponent 也用了 唯一没改的就是tomcat里的编码了 过滤器也设置了 还是各种乱码 展开
 我来答
米果2009
推荐于2016-09-16 · 超过14用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:36.7万
展开全部
你好,这问题我遇到过,如果你确定你的Struts端和JSP端都统一设置成UTF-8的话,那么你这么做。
以下解决方法不分顺序,按照自己的配置对比.
1 struts2配置

struts2在配置struts.properties文件中加上struts.i18n.encoding=UTF-8 或者在struts.xml里加上<constant name="struts.i18n.encoding" value="UTF-8" />

2 数据库

2.1 mysql的表的编码方式,其DDL应该为: ENGINE=InnoDB DEFAULT CHARSET=utf8; 可以使用show create table tbname查看.

2.2 安装mysql数据库时就应该以utf8编码默认安装查看mysql数据库默认编码方式可以在其目录下my.ini文件中找到mysql和mysqld下default-character-set值为utf8或者在mysql数据库命令行下以"\s;"查看.

3 页面

每个页面上加上<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 这样在jsp页面里,注意在jsp文件上点右键,编码方式为UTF-8时,才正确,这点很重要。

4 jdbc连接

设置characterencoding为UTF-8 如jdbc.mysql.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF8

5 tomcat

为了保证get/post数据都采用相同的UTF8编码,我们在server.xml中进行了如下设置: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
好了,OK。搞定。
追问
struts2配置过了 没用~ 数据库是oracle  还有 我是jquery post传到action乱码 还没经过数据库.... 其他的方法倒是没试过  谢谢你回答这么多~
追答
第五條有沒有試過呢?
還有一點:
JSP直接传给Struts和JSP通过Ajax传给Struts是不同的,Ajax的post方法(不推荐用get方法)默认传送的编码方式是UTF-8,而JS能自动把客户端的GB系列的编码转成UTF-8再发送(IE中是这样,其它浏览器不清楚)。这样一来,最终传给Struts端一定是UTF-8,而如果Struts端设置成GBK或其它的GB编码的话,就会出现乱码。
name_ouyiping
2011-09-08 · 超过79用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:119万
展开全部
在js中先给他转码
var contents = unicode(data);
后台接收后 给他转回来
/**
* 将页面传来的Unicode字符编码转换为正常字符

public static String ConverUnicode(String source){
Pattern p = Pattern.compile("^[0-9]*$");
Matcher m = null;
if(source != null && !source.equalsIgnoreCase("")){
m = p.matcher(source);
if (m.matches()) {
return source;
}
StringBuffer sb=new StringBuffer();
String[] sa = source.split(";");

for(int i=0; i<sa.length; i++){
String tp = sa[i];
tp = tp.replace("&#", "");
int charCode = Integer.parseInt(tp);
sb.append((char)charCode);
}

return sb.toString();
}else{
return "";
}
}

嘎嘎 这是我正在项目里面解决的方法 ,祝你好运。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ahyyxx222
2011-09-03 · TA获得超过2532个赞
知道小有建树答主
回答量:1405
采纳率:33%
帮助的人:1209万
展开全部
传中文参数本来就是种不好的设计,可以传约定的数字,英文单词,只要意思过去了没必要非得传中文。
实在要传的话,用encodeURI进行两次编码,注意是重复编码两次
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kingofsong
2011-09-03 · TA获得超过168个赞
知道小有建树答主
回答量:230
采纳率:100%
帮助的人:86万
展开全部
中文的不能用utf-8吧,应该用GBK
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琦晴岚0i41eb
2011-09-03
知道答主
回答量:39
采纳率:0%
帮助的人:9.3万
展开全部
这个问题 我也遇到过 我是将数据再次转码了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式