Ajax的Post提交数据程序接受中文乱码解决办法

Ajax以POST方式提交,url形式为”url?param=xx&param2=xx”时,如果传递的参数是中文或日文,后台接收参数将出现乱码,疑似“灏?浼??ㄨ??rdquo;。此时我们需要将url编码成UTF-8。调用javascript方法encodeURI(URIstring),后台接收参数调用URLDecoder.decode(String s,String enc) 解码。
工作中遇到这个问题,起初打算用反射循环给属性转码,考虑到反射效率问题,为避免滥用反射。于是想到BeanUtils工具包赋值前能不能自定义操作呢?还真行。下面给出工作中遇到的实例,页面通过jQuery序列化所有表单使之成为url参数形式字符串,通过Ajax提交。后台Struts封装的FormBean取得所有参数值,调用BeanUtils工具包copyProperties(Object dest, Object orig)方法将FormBean复制到ValueBean,在复制对象属性之前,自定义String编码转换器,转换器中通过URLDecoder.decode(String s,String enc)对Value进行转码。对象的所有属性将会通过自定义转换器过滤转码成中文。

解决此问题的方法非常简单,只需要在JS处理参数时用escape()函数处理一下即可,而且不需要再用unescape()解码,这个方法适合POST和GET方式,具体的Ajax代码这里我不例出,这里给出用escape()函数处理参数时的代码:
 

 代码如下 复制代码
var htmer ="getcode="+escape(getcode)+"&Content="+escape(Content); 

通常我们在处理Ajax的时候会在这里直接获取参数的值,为了使中文参数不是乱码,我们只需要用escape()函数对参数处理下即可。

问题二

当网站页面不是utf-8编码时,ajax提交的中文便会变成乱码,解决方法如下:

找到jquery.js里的

 代码如下 复制代码

 
contentType:application/x-www-form-urlencoded

将它改成

 
contentType:application/x-www-form-urlencoded; charset=UTF-8

就可以了。原因:未指定charset时,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。jquery的ajax根本没有考虑到国际化的问题,而使用了欧洲的字符集,所以传递中文时才会出现乱码。

例子

js的ajax

 代码如下 复制代码

if(confirm("确定保存吗?")){
 var url = "xxAction.do?method=xxMethod";
 var data = $("form:first").serialize();
 data = encodeURI(data); // 提交数据URL通过encodeURI(URIstring)编码
 $.ajax({
  type:"POST",
  url:url,
  data:data,
  success:function(msg){
   alert(msg);
  }
 });
}

后台程序

 代码如下 复制代码

private void formBeanToValueBean(ZmxgzzmsyVB vb, ZmxgzzmsyFB fb)
  throws Exception {
 // 自定义转换String编码转换器
 ConvertUtils.register(new Converter() {
  public Object convert(Class type, Object value) {
   if (value == null) {
    return null;
   } else {
    String val = "";
    try {
     // 通过URLDecoder.decode(String s,String enc)解码
     val = URLDecoder.decode(value.toString(), "UTF-8");
    } catch (Exception e) {
     e.printStackTrace();
    }
    return val;
   }
  }
 }, String.class);
 BeanUtils.copyProperties(vb, fb);
 ConvertUtils.deregister();
}

时间: 2024-08-02 13:54:54

Ajax的Post提交数据程序接受中文乱码解决办法的相关文章

数据库 MySQL中文乱码解决办法总结

MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 create table user(name varchar(11)); # 创建user表 insert into table user("carl"); # 添加数据 select * from user; insert into user value(&

关于cookie中文乱码解决办法

关于cookie中文乱码解决办法 后台: 存值 (使用 HttpUtility.UrlEncode 进行编码) Response.Cookies("ABC").Value = HttpUtility.UrlEncode("ABC") 取值 (使用 HttpUtility.UrlDecode 进行解码) Str = HttpUtility.UrlDecode(Request.Cookies("ABC").Value) 和JS进行交互: 在用js生成

远程linux中文乱码解决办法

使用xshell登录中文版CentOS或者redhat时,在xshell下如果输出的是中文的话可能会显示乱码,通过如下办法可以有效的解决乱码问题 linux中文乱码解决方法如下: [root@localhost ~]# cd /etc/sysconfig/ [root@localhost sysconfig]# cp i18n i18n.bak #备份i18n文件 [root@localhost sysconfig]# echo "" >i18n [root@localhost

javascript ajax提交数据中文乱码解决办法

一个UTF8页面需要POST数据到GB2312页面,这时中文的编码是按照UTF8提交过去的,GB2312页面无法接收.如何实现,网络搜索了一种很不错的方法,但有缺陷,这里一一说起. 1.FORM标签里加上accept-charset代码,这个能把FORM里的数据自动编码成指定的字符集提交,比如在UTF8页面提交数据到GB2312,代码就是accept-charset="GB2312″,但accept-charset除了IE其他浏览器都支持... 2.这时可以在提交时触发JS,document.c

jquery ajax之post提交数据chrome和ie乱码

在用jquery处理html5的应用的时候,一直在firefox下测试都正常,用户用pad访问的时候说有乱码, 自己试验了下果然,后发现chrome和ie内核下都是有此问题,此问题设置了页面属性为utf-8时候,只有firefox是传的charset=utf-8的头文件 chrome和ie都没有指定,所以出现乱码问题. 解决方法:  代码如下 复制代码 $.ajaxSetup({   contentType: "application/x-www-form-urlencoded; charset

Ajax在IE浏览器会出现中文乱码解决办法

在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. Ajax在IE浏览器会出现中文乱码的情况!解决办法如下 <script type="text/javascript"> function showDiv(str){ document.getElementById("picDiv").style.display=""; var xmlhttp; if (str==""){ document.ge

pdo连接数据类与中文乱码解决方法

1.pdo简介 pdo(php教程 data object) 是php 5 中加入的东西,是php 5新加入的一个重大功能,因为在php 5以前的php4/php3都是一堆的数据库教程扩展来跟各个数据库的连接和处理,什么 php_mysql教程.dll.php_pgsql.dll.php_mssql.dll.php_sqlite.dll等等. php6中也将默认使用pdo的方式连接,mysql扩展将被作为辅助 2.pdo配置 php.ini中,去掉"extension=php_pdo.dll&q

PHP中文乱码解决办法[转]

一.首先是PHP网页的编码 1.     php文件本身的编码与网页的编码应匹配 a.     如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开

PHP 中文乱码解决办法总结分析_php技巧

一.首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312″),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312″>,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文