-
请教一个乱码的问题5
页面编码:gbk
后台转码:<constant name="struts.i18n.encoding" value="GBK" />
普通提交(页面submit直接提交)后台无乱码。
采用prototype.js的ajax.request提交方式,就出现乱码了,怎么转换都不行。
prototype.js有一句是post采用的UTF-8编码。
我再换成get提交。还是乱码。
怎么弄才让prototype提交不乱码。
问题补充:beneo 写道引用prototype.js 中文乱码问题的解决办法
我的问题是,在页面上用GBK,然后用ajax发送数据,
function doupdate(){
if(check()){
var frm = $("myform");
var url = "fpupdate.do";
var pars = Form.serialize(frm);
new Ajax.Request(url,{method: 'post',parameters:pars,onComplete: callback});
}
}
function callback(xml){
var msg = xml.responseText;
if(msg =="5"){
alert("修改保存成功!");
window.close();
}else if(msg=="1"){
alert("所开发票总金额超出单张发票最大限额!请修改后重试!");
}else if(msg=="2"){
alert("所开发票金额累计已超出今天最大限额!请修改后重试!");
}else if(msg=="3"){
alert("所开发票金额累计超出本月发票最大限额!请修改后重试!");
}else if(msg=="4"){
alert("所开发票总金额累计超出今年发票最大限额!请修改后重试!");
}
}
然后发现,在修改成功后,向数据库中保存之前,取到的参数值就出现乱码了,结果,以乱码更新到数据库,在页面上查找更新后的结果时,就出现乱码了。我的解决办法是:
页面端不变,在action服务器端用
String kprq = new String(request.getParameter("kprq").getBytes("gbk"),"utf-8");// 开票日期
这样的方法进行转码,因为prototype.js默认用UTF-8进行数据传递的,所以在服务器端要把utf-8再转换成GBK,这样就OK了。下面是从网上查找的资料,方便参考
============================================================
AJAX中文问题分为两大类:
1)发送路径中的参数有中文,在服务器段接收参数值是乱码
例如:
var url="a.jsp?name=小李";
xmlHTTP.open ("post",url,true);
解决办法:
利用javascript的提供的escape()或encodeURI()方法
例如:
客户端:
var url="a.jsp?name=小李";
url=encodeURI(url);
url=encodeURI(url); //两次,很关键[具体为什么,我也不清楚]
/********************************************/
也有人写成var url="a.jsp?name=escape("小李")";
功能和encodeURI方法类似。
/********************************************/
xmlHTTP.setrequestheader("cache-control","no-cache");
xmlHTTP.setrequestheader("Content-Type","application/x-www-form-urlencoded");
xmlHTTP.setrequestheader("contentType","text/html;charset=uft-8")//指定发送数据的编码格式
xmlHTTP.open ("post",url,true);
服务器端:
String name = request.getParameter("name");
name = java.net.URLDecoder.decode("name", "UTF-8");
2)返回来的responseText或responseXML的值中含有中文是乱码
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
解决办法:在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
总结:
1)ajax提交数据的格式默认为utf-8,利用javascript的提供的escape()或encodeURI()方法.在服务器端接收的时候要使用java.net.URLDecoder.decode("","UTF-8")方法进行解码.
2)xtmlhttp 返回的数据默认的字符编码是utf-8,所以服务器要向客户端发送数据的时候,也要采用utf-8编码.如果上述方法仍然解决不了乱码问题,那你尝试一下把jsp,htm,java文件用UTF-8编码格式保存.
总之:前后台数据交互都采用utf-8编码就行了.
===========================================
解决:
在url中把中文部分用encodeURI加密两次
例如 var url = aaa.do?xxxx=encodeURI(encodeURI("哈哈"))
在java类解密一次
java.net.URLDecoder.decode(request.getParameter("xxxx"),"utf-8");
ajax只支持utf-8格式的
首先,改成
response.setCharacterEncoding("GB2312");
servlet中处理时候,需要
String str = new String("中文".getBytes("iso-8859-1"),"gb2312");
实在不行你就写一个过滤器吧,这样也稳定。
http://hi.baidu.com/kaisep/blog/item/328c25f3f9c7e85a352accb3.html
补充一下:用的是struts2,这里乱码的是一个title的属性。页面提交post
提交的时候我Form.serialize打印出来看了一下是%xx3个一组的,是UTF-8的编码格式吧?呵呵!
现在我只想用post提交。
new String()这种处理方法我试过了,怎么不行呢?神了...
问题补充:yqin 写道前台:
var url = "${base}/news/addQuestionCom.shtml";
var params = "mobile=" + mobile.value+"&qContent=" + encodeURI(encodeURI(qContent.value)) +"&qType=" + qType.value;
var myAjax = new Ajax.Request(url,
{
method:'post',
parameters:params,
onComplete:thinks,
asynchronous:true
}
);//注意了,红色部分:要进行2次编码。
后台:
import java.net.URLDecoder;
qContent=URLDecoder.decode(qContent,"utf8"); //post 传递的时候,一定是用utf8编码的,url 自己可以设定
你这方法酷了,顺利解决!!3Q
同时感谢第一位哥们。呵呵2011年1月06日 09:49
4个答案 按时间排序 按投票排序
-
采纳的答案
前台:
var url = "${base}/news/addQuestionCom.shtml";
var params = "mobile=" + mobile.value+"&qContent=" + encodeURI(encodeURI(qContent.value)) +"&qType=" + qType.value;
var myAjax = new Ajax.Request(url,
{
method:'post',
parameters:params,
onComplete:thinks,
asynchronous:true
}
);//注意了,红色部分:要进行2次编码。
后台:
import java.net.URLDecoder;
qContent=URLDecoder.decode(qContent,"utf8"); //post 传递的时候,一定是用utf8编码的,url 自己可以设定2011年1月06日 09:58
-
encodeURI()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )
在使用encodeURIComponent对URL的参数进行编码,再发送,如:
"test.action?" + encodeURIComponent("a=中国&b=人民");
然后在Java代码中解码:
java.net.URLDecoder.decode(接收到的参数, "UTF-8");2011年1月06日 10:01
-
引用prototype.js 中文乱码问题的解决办法
我的问题是,在页面上用GBK,然后用ajax发送数据,
function doupdate(){
if(check()){
var frm = $("myform");
var url = "fpupdate.do";
var pars = Form.serialize(frm);
new Ajax.Request(url,{method: 'post',parameters:pars,onComplete: callback});
}
}
function callback(xml){
var msg = xml.responseText;
if(msg =="5"){
alert("修改保存成功!");
window.close();
}else if(msg=="1"){
alert("所开发票总金额超出单张发票最大限额!请修改后重试!");
}else if(msg=="2"){
alert("所开发票金额累计已超出今天最大限额!请修改后重试!");
}else if(msg=="3"){
alert("所开发票金额累计超出本月发票最大限额!请修改后重试!");
}else if(msg=="4"){
alert("所开发票总金额累计超出今年发票最大限额!请修改后重试!");
}
}
然后发现,在修改成功后,向数据库中保存之前,取到的参数值就出现乱码了,结果,以乱码更新到数据库,在页面上查找更新后的结果时,就出现乱码了。我的解决办法是:
页面端不变,在action服务器端用
String kprq = new String(request.getParameter("kprq").getBytes("gbk"),"utf-8");// 开票日期
这样的方法进行转码,因为prototype.js默认用UTF-8进行数据传递的,所以在服务器端要把utf-8再转换成GBK,这样就OK了。下面是从网上查找的资料,方便参考
============================================================
AJAX中文问题分为两大类:
1)发送路径中的参数有中文,在服务器段接收参数值是乱码
例如:
var url="a.jsp?name=小李";
xmlHTTP.open ("post",url,true);
解决办法:
利用javascript的提供的escape()或encodeURI()方法
例如:
客户端:
var url="a.jsp?name=小李";
url=encodeURI(url);
url=encodeURI(url); //两次,很关键[具体为什么,我也不清楚]
/********************************************/
也有人写成var url="a.jsp?name=escape("小李")";
功能和encodeURI方法类似。
/********************************************/
xmlHTTP.setrequestheader("cache-control","no-cache");
xmlHTTP.setrequestheader("Content-Type","application/x-www-form-urlencoded");
xmlHTTP.setrequestheader("contentType","text/html;charset=uft-8")//指定发送数据的编码格式
xmlHTTP.open ("post",url,true);
服务器端:
String name = request.getParameter("name");
name = java.net.URLDecoder.decode("name", "UTF-8");
2)返回来的responseText或responseXML的值中含有中文是乱码
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
解决办法:在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
总结:
1)ajax提交数据的格式默认为utf-8,利用javascript的提供的escape()或encodeURI()方法.在服务器端接收的时候要使用java.net.URLDecoder.decode("","UTF-8")方法进行解码.
2)xtmlhttp 返回的数据默认的字符编码是utf-8,所以服务器要向客户端发送数据的时候,也要采用utf-8编码.如果上述方法仍然解决不了乱码问题,那你尝试一下把jsp,htm,java文件用UTF-8编码格式保存.
总之:前后台数据交互都采用utf-8编码就行了.
===========================================
解决:
在url中把中文部分用encodeURI加密两次
例如 var url = aaa.do?xxxx=encodeURI(encodeURI("哈哈"))
在java类解密一次
java.net.URLDecoder.decode(request.getParameter("xxxx"),"utf-8");
ajax只支持utf-8格式的
首先,改成
response.setCharacterEncoding("GB2312");
servlet中处理时候,需要
String str = new String("中文".getBytes("iso-8859-1"),"gb2312");
实在不行你就写一个过滤器吧,这样也稳定。
http://hi.baidu.com/kaisep/blog/item/328c25f3f9c7e85a352accb3.html2011年1月06日 09:54
相关推荐
设置乱码问题,设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题设置乱码问题
中文乱码问题分析中文乱码问题分析中文乱码问题分析中文乱码问题分析中文乱码问题分析中文乱码问题分析
qt乱码问题解决
JAVA 乱码问题,JAVA 乱码问题,JAVA 乱码问题JAVA 乱码问题JAVA 乱码问题JAVA 乱码问题
乱码解决 乱码解决 乱码解决 乱码解决 乱码解决 乱码解决 乱码解决
最近发现乱码问题很烦,找了许多资料,自己总结了一些东西,主要是web页面的乱码,请大家指正
Ajax中文乱码问题解决方案
myeclipse中文乱码问题 myeclipse中文乱码问题myeclipse中文乱码问题myeclipse中文乱码问题myeclipse中文乱码问题myeclipse中文乱码问题myeclipse中文乱码问题
Ajax 中文乱码问题 Ajax 中文乱码问题 Ajax 中文乱码问题
解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码...
java中文乱码问题详解--- java中文乱码问题详
中文乱码问题整理总结 通过平时开发实践,总结的乱码问题.
mysql乱码问题解决mysql乱码问题解决mysql乱码问题解决
描述开发工具使用过程中,令人头痛的tera term中文乱码问题,如何快速定位解决
java项目乱码问题的处理方法,非常详细的
开发过程只能怪,遇到Oracle数据库US7ASCII字符集乱码问题
struts中文乱码问题解决详细步骤(两种方法)
今天突然提及的操作之php的JPgraph横坐标中文乱码问题,迫不及待 测试了一下, 尝试了几遍,都是乱码,好不容易没有乱码了,却报错。 解决JPgraph的横坐标显示,中文乱码问题,横坐标数组资源。
在公司做项目的时候发现用Netty进行TCP/IP通信的Netty客户端接收到的数据进制乱码,经过摸索,终于成功解决了这个鸡肋的问题
struts 中文乱码问题解决