java解决乱码

//解决方法很简单:使用javascript中的escape(string) 函数
http_request.open("POST",url,true); 
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
http_request.send("action="+strName+"&val="+escape(val));   //val的值为中文不会产生乱码



最近在开发中碰到ajax传递中文参数乱码的问题,弄了很久才搞定,在此记录一下开发经过,以备以后查阅。 
开发时测试的服务器为tomcat6.0,web前台ajax传输未经编码的中文参数arg=中文参数,java后台通过下面代码获取中文参数: 

Java代码  
String arg= request.getParameter("arg");   
arg = new String(arg.getBytes("ISO-8859-1"), "GBK");  

String arg= request.getParameter("arg"); 
arg = new String(arg.getBytes("ISO-8859-1"), "GBK"); 在实际部署时用的是weblogic8服务器,由于web容器编码方式不同,发现通过上面的代码获取的中文参数为乱码。为了能够兼容不同的web容器,在传递中文时需要将中文参数进行编码:
 
Js代码  
var arg = "中文参数";   
arg = encodeURI(encodeURI(arg));  //这里编码两次,不然后台获取时还是乱码  

var arg = "中文参数"; 
arg = encodeURI(encodeURI(arg));  //这里编码两次,不然后台获取时还是乱码 
后台通过如下方式获取参数: 


Java代码  
String arg = request.getParameter("arg");   
arg = java.net.URLDecoder.decode(arg, "UTF-8");  //解码取得中文参数  

String arg = request.getParameter("arg"); 
arg = java.net.URLDecoder.decode(arg, "UTF-8");  //解码取得中文参数 在取得中文参数后,经过处理要返回带中文内容的xml格式文本到前台,在tomcat下能够获取正确的内容,但在weblogic8下发现返回的中文内容被截断了,并破坏了xml文档结构(在weblogic 11g没有该问题),查了半天不知道什么原因,即使给中文内容报上<![CDATA[]]>也无效。于是干脆将中文进行编码后在返回到前台页面:
 

Java代码  
java.net.URLEncode.encode("中文内容    ", "UTF-8");     

java.net.URLEncode.encode("中文内容    ", "UTF-8");    前台获取后进行解码: 


Js代码  
var result = decodeURI(returnValue);  

var result = decodeURI(returnValue); 按照上面修改后,在weblogic和tomcat下测试了一下,不管是前台往后台,还是后台往前台传递中文都不会出现乱码。
 
前台获取中文内容显示在页面上时,发现中文内容后面有一大串的加号,检查了下代码发现,后台进行编码的中文内容中含有空格,java.net.URLEncode.encode()会把空格编码为“+”,而前台就avascript的decodeURI()不会把+号解码为空格。解决方法是将后台编码后的字符串中的“+”替换为“%20”:
 

Java代码  
java.net.URLEncode.encode("中文内容     ", "UTF-8").replace("+", "%20");  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值