jquery post 乱码 提交到struts2 中文乱码 很多方法都试过了..采用的都是utf-8
jquery里也加了编码设置为utf-8,encodeURIComponent也用了唯一没改的就是tomcat里的编码了过滤器也设置了还是各种乱码...
jquery 里也加了编码设置为utf-8,encodeURIComponent 也用了 唯一没改的就是tomcat里的编码了 过滤器也设置了 还是各种乱码
展开
6个回答
展开全部
你好,这问题我遇到过,如果你确定你的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。搞定。
以下解决方法不分顺序,按照自己的配置对比.
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编码的话,就会出现乱码。
展开全部
在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 "";
}
}
嘎嘎 这是我正在项目里面解决的方法 ,祝你好运。
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 "";
}
}
嘎嘎 这是我正在项目里面解决的方法 ,祝你好运。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传中文参数本来就是种不好的设计,可以传约定的数字,英文单词,只要意思过去了没必要非得传中文。
实在要传的话,用encodeURI进行两次编码,注意是重复编码两次
实在要传的话,用encodeURI进行两次编码,注意是重复编码两次
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中文的不能用utf-8吧,应该用GBK
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题 我也遇到过 我是将数据再次转码了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询