AJAX提交中文乱码解决
ajax+php应用的乱码问题分析与解决
明确问题:很多朋友出现乱码后,就在论坛发帖,或网上搜寻相关文章.然后,很快就认识了header("content-type:text/html; charset=utf-8"),iconv('gbk', 'utf-8', " ...."),mysql_query(set names xxx)以及一个什么php实现的unescape函数等等甚至连为什么产生乱码都没去想,问题有时候还真被解决了[这就是互联网的神奇之处]其实,根本问题很容易理解,就是存储方式和读取方式不一致你存储的是一段utf-8编码的文字,却告诉浏览器用gb2312的方式去解析.问题自然就来了!如下面这段代码,用记事本保存为html文件,IE打开是没有任何问题的!如果你把第四行的gb2312改为utf-8那问题自然就来了因为记事本默认的是用ANSI标准保存,而gb2312是其中的一种!对于简体中文的操作系统,我们存储的是一段gb2312数据!如果你骗浏览器这是一段utf-8的数据,那这个忠实的仆人自然就会犯错误了![gb2312改成utf-8(请在记事本中修改)后,标题和内容成乱码了]复制内容到剪贴板代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><body><p>无标题文档</p></body></html>整个ajax+php应用中,数据要转手两次存在于三个层次中分别是前台html 后台php 以及数据库下面将按一个读取的过程,依次分析两次转手的过程数据库<->php过程分析mysql编码问题,应该是我们论坛的朋友最熟悉的,就不多说了!而且没有什么可说的,你只要能确定你当前数据库中的数据不是乱码就行了这里,提一下mysql_query("SET NAMES '编码格式如(utf8)'")我找了一段网上关于set names 的说明:复制PHP内容到剪贴板PHP代码:SET NAMES显示客户端发送的SQL语句中使用什么字符集。
PHP调用Ajax编码问题解决方案.
PHP调用Ajax编码问题解决方案.今天给一老乡做一问题提交系统,利用Ajax简单做了下,中途也对Ajax的学习又重新来了一篇.主要是关于乱码的问题.一.出现乱码的几种可能性代码:1、数据返回时与默认网页编码不同.如网页为gb2312,但是返回来的数据一般为utf-8.2、数据进入数据库时,编码与数据不同。
而导致乱码.二、解决方法。
代码:1、始终记住一个网页只能有一种编码,因此在要么修改网页的编码(但是相当麻烦)。
要么修改数据的编码(当然这其实是对Ajax提交的数据重新处理).2、统一数据库与网页的编码,要么用gb,要么用utf-8.三、几个有用的函数.PHP中utf-8与gb码的互换.代码:/*** 编码UTF-8到GB2312之间的转换** @param string $c* @return string*/function utf82gb($c){$str="";if ($c < 0x80) {$str.=$c;} else if ($c < 0x800) {$str.=chr(0xC0 | $c>>6);$str.=chr(0x80 | $c & 0x3F);} else if ($c < 0x10000) {$str.=chr(0xE0 | $c>>12);$str.=chr(0x80 | $c>>6 & 0x3F);$str.=chr(0x80 | $c & 0x3F);} else if ($c < 0x200000) {$str.=chr(0xF0 | $c>>18);$str.=chr(0x80 | $c>>12 & 0x3F);$str.=chr(0x80 | $c>>6 & 0x3F);$str.=chr(0x80 | $c & 0x3F);}return iconv(‘UTF-8‘,‘GB2312‘, $str); }VBScript修改Ajax返回数据.代码:Function bytes2BSTR(vIn)dim istrReturn = ""For i = 1 To LenB(vIn)ThisCharCode = AscB(MidB(vIn,i,1))If ThisCharCode < &H80 ThenstrReturn = strReturn & Chr(ThisCharCode)ElseNextCharCode = AscB(MidB(vIn,i+1,1))strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))i = i + 1End IfNextbytes2BSTR = strReturnEnd Function。
jQueryajax方法传递中文时出现中文乱码的解决方法
jQueryajax⽅法传递中⽂时出现中⽂乱码的解决⽅法本⽂实例讲述了jQuery ajax⽅法传递中⽂时出现中⽂乱码的解决⽅法。
分享给⼤家供⼤家参考,具体如下:使⽤jQuery的ajax⽅法,在传递中⽂时出现中⽂乱码,按照以前的⽅法,修改了jquery⽂件中的ajaxSetting也不好使复制代码代码如下:sajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded;charset=UTF-8",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest}也不好使,即使在Ajax中加上复制代码代码如下:contentType: "application/x-www-form-urlencoded;charset=UTF-8",也不起作⽤,后来发现,没有加上type:'POST',加上就好了,另外,最好在jsp中修改chartset和pagingEncoding为UTF-8<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>同时在java代码中在使⽤⼀下response.setCharacterEncoding("UTF-8");更多关于jQuery相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家jQuery程序设计有所帮助。
Ajax使用POST提交中文乱码问题
Ajax使用POST提交中文乱码问题前段时间写JSP,使用AJAX以POST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAX以POST方式提交数据,中文一样是乱码。
搜索一下相关资料,问题应该是提交数据时是以UTF-8编码提交,所以接收时如果使用GB2312或者其它中文编码的话就会乱码。
使用GET方式提交数据的时候,中文问题很好解决,setRequestHeader("Content-Type","text/html; encoding=gb18030")就可以了。
但这个方法在POST方式中却不起作用。
大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。
对于使用POST,JSP的解决方法如下:使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。
初始页面内容如下(hello.jsp):<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>AJAX提交页面</title><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><script type="text/javascript">function justdo(){var post = "name=王力猛&email=wallimn@&bokee=";post = encodeURI(post);post = encodeURI(post); //两次,很关键var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");var URL = "act.jsp"; //文件名需要调整成测试时的相应位置xmlObj.open("POST",URL,true);xmlObj.setRequestHeader("Cache-Control","no-cache");xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");xmlObj.send(post); //注意:POST方式,使用这个来发送内容}</script></head><body><input type="button" value="提交" onclick="justdo()" /></body></html>Ajax请求处理页面(act.jsp)的内容如下:<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@page import=".URLDecoder"%><html><head><title>ajax deal</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"></head><body><%//遍历输出参数内容。
ajax请求乱码的解决方法(中文乱码)
ajax请求乱码的解决⽅法(中⽂乱码)今天遇到⼀个问题,有关ajax请求中传输中⽂,遇到乱码的问题。
如下代码:复制代码代码如下:function UpdateFolderInfoByCustId(folderId, folderName, custId) {$.ajax({type: "Post",contentType: "application/x-www-form-urlencoded; charset=utf-8",url: "http://localhost/CRM/Ashx/HandKBSucessCustomer.ashx?Method=UpdateCustomerByCustId&folderId="+ folderId + "&folderName=" + encodeURI(encodeURI(folderName)) + "&custId=" + custId,success: function (msg) {alert(msg);},error: function (error) {alert(error);}});}如上代码如果只是传“&foderName=”+folderName 的话,汉字就会产⽣乱码,如果经过encodeURL 转换两次的话,汉字编码会变为类似“%e6%b5%8b%eb%af%95” 的格式。
转换为这种格式之后,在获取的时候在转码,如下所⽰:复制代码代码如下:public void UpdateCustomerByCustId(){int folderId = Convert.ToInt32(Request["folderId"]);string folderName = Request["folderName"];string folderName2 = Convert.ToString(System.Web.HttpUtility.UrlDecode(folderName));int custId = Convert.ToInt32(Request["custId"]);bool res = false;try{res = CustomerBusiness.UpdateCustomerByCustId(folderId, folderName2, custId);}catch (Exception ex){throw;}Response.Write(res);}}}经此转换之后,即可获取到传输的汉字。
AJAX处理汉字乱码的问题
AJAX处理汉字乱码的问题JSP中乱码产⽣的原因是web容器(Tomcat)默认使⽤ISO-8859-1进⾏编码的,⽽我们可能使⽤的是UTF-8,GBK,GB2312等编码⽅式进⾏jsp编写的,因此需要⼀个转换器进⾏转换或者修改默认编码⽅式,这⾥我主要⽤转换器+过滤器完成⾃动转换功能.客户端脚本⽂件:View Code/** name:getTransport* create XMLHttpRequest*/var xmlhttp=null;function getHttpRequest(){try{xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');}catch(e1){xmlhttp=new XMLHttpRequest();}}}function httpGet(url,method,data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url +"?"+data,true);//有回调函数时为true,没有时falsexmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length",data.length);xmlhttp.onreadystatechange=getCallback;xmlhttp.send (null);}function getCallback(){if(xmlhttp.readyState==4){if(xmlhttp.status==200){var xmlDoc=xmlhttp.responseText;data=eval(xmlDoc);var tableFormat="<table rules='all' ><tr><td class='tablehead'>编号</td><td class='tablehead'>姓名</td><td class='tablehead'>性别</td><td class='tablehead'>电话</td><td class='tablehead'>地址</td><td class='tablehead'>星座</td><td for(var key in data){tableFormat+="<tr><td>"+data[key].id+"</td><td>"+data[key].name+"</td><td>"+data[key].sex+"</td><td>"+data[key].phone+"</td><td>"+data[key].address+"</td><td>"+data[key].constellation+"</td><td><a target='"+data[key].id+"' title='修改' onclick='openedit(this)'><img src='img/edit.jpg'></a></td><td><a target='"+data[key].id+"' title='删除' onclick='opendel(this)'><img src='img/del.jpg' ></a></td>< }tableFormat+="</table>";document.getElementById("showout").innerHTML=tableFormat;}else{document.getElementById("showout").innerHTML="AJAX Server error,code:"+xmlhttp.status+"!";}}}function httpPut(url, method, data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length", data.length);xmlhttp.onreadystatechange=putCallback;xmlhttp.send(data);}function putCallback(){var panel=document.getElementById("showsuccess");if (xmlhttp.readyState==4){if(xmlhttp.Status >=400 && xmlhttp.Status <=599)panel.innerHTML="Error Occurred : "& xmlhttp.Status & "-" & xmlhttp.statusText;else{panel.innerHTML=xmlhttp.responseText;httpGet("myServlet", "GET", "name="+"获得数据");}setTimeout(hideinfo,1000);}}function httpPost(url, method, data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length",data.length);xmlhttp.onreadystatechange=postCallback;xmlhttp.send(data);}function postCallback(){var panel=document.getElementById("showsuccess");if(xmlhttp.readyState==4){if(xmlhttp.status==200){if(xmlhttp.Status >=400 && xmlhttp.Status <=599)panel.innerHTML="Error Occurred : "& xmlhttp.Status & "-" & xmlhttp.statusText;else{panel.innerHTML=xmlhttp.responseText;httpGet("myServlet", "GET", "name="+"获得数据");}setTimeout(hideinfo,1000);}}}function httpDelete(url, method, data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url+"?"+data,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length", data.length);xmlhttp.onreadystatechange=deleteCallback;xmlhttp.send(null);}function deleteCallback(){if (xmlhttp.readyState==4){if(xmlhttp.Status >=400 && xmlhttp.Status <=599)document.getElementById("showsuccess").innerHTML="Error Occurred : "& xmlhttp.Status & "-" & xmlhttp.statusText;else{document.getElementById("showsuccess").innerHTML=xmlhttp.responseText;httpGet("myServlet", "GET", "name="+"获得数据");}setTimeout(hideinfo,1000);}}function getAjaxJson(){httpGet("myServlet", "GET", "name="+"获得数据");}function addAjaxJson(){var panel=document.getElementById("addpanel");document.getElementById("title").innerHTML="增加学⽣信息选项卡";panel.style.top='50px';panel.style.left='200px';panel.style.display='block';document.getElementById("addedit").value="提交";flag=true;}function closepanel(){document.getElementById("addpanel").style.display='none';}function addrecord(){var panel=document.getElementById("showsuccess");var s= new Object();s.Id=id;=document.getElementById("name").value;s.Sex=document.getElementById("sex").value;s.Phone=document.getElementById("tel").value;s.Address=document.getElementById("address").value;s.Constellation=document.getElementById("star").value;if(==""){panel.innerHTML="学⽣姓名不能为空";setTimeout(hideinfo,1000);return;}if(s.Sex==""){panel.innerHTML="学⽣性别不能为空";setTimeout(hideinfo,1000);return;}if(s.Phone==""){panel.innerHTML="学⽣电话不能为空";setTimeout(hideinfo,1000);return;}if(s.Address==""){panel.innerHTML="学⽣家庭不能为空";setTimeout(hideinfo,1000);return;}if(s.Constellation==""){panel.innerHTML="学⽣星座不能为空";setTimeout(hideinfo,1000);return;}var data= JSON.stringify(s);if(flag==true){httpPut("myServlet","PUT",data);}else{httpPost("myServlet","POST",data);}}function openedit(obj){var panel=document.getElementById("addpanel");document.getElementById("title").innerHTML="更新学⽣信息选项卡";panel.style.top='50px';panel.style.left='200px';panel.style.display='block';document.getElementById("addedit").value="保存";for(var key in data){if(data[key].id==obj.target){id=data[key].id;document.getElementById("name").value=data[key].name;document.getElementById("sex").value=data[key].sex;document.getElementById("tel").value=data[key].phone;document.getElementById("address").value=data[key].address;document.getElementById("star").value=data[key].constellation;break;}}flag=false;}function opendel(obj){var mid=null;for(var key in data){if(data[key].id==obj.target){mid=data[key].id;break;}}if(confirm("你确定要删除数据吗?"))httpDelete("myServlet","DELETE","id="+mid);}function hideinfo(){document.getElementById("showsuccess").innerHTML='';}⾸先,项⽬中所有的源⽂件(.class,*js,*.css)的编码⽅式改为UTF-8。
jquery的的中文乱码汇总
jquery的的中文乱码汇总1、使用$.ajax出现的中文乱码的解决方案:[javascript]var _realname = $("input[name='_searchName']").val();var termcourseId = '<%=termid%>';var classId = '<%=classid%>';var url = "/addressbook/studentListNoPage.do";//var dataUrl ="formMap.TERMCOURSE_ID="+termcourseId+"&formMap.CLASS_ID="+classId+"&for mMap.IS_ONLINE=all&formMap.REALNAME="+_realname;$.ajax({type: "POST",url: url,dataType:"json",data: {"formMap.TERMCOURSE_ID":termcourseId,"formMap.CLASS_ID":classId,"formMap.IS_ONLINE":"all","formMap.REALNAME":encodeURI(_realname)},contentType: "application/x-www-form-urlencoded;charset=utf-8",success: function(data){data = eval(data);var html = "";$("#allUnselectedUser").html(html);},error : function(XMLHttpRequest, textStatus, errorThrown){ alert(textStatus);}});其中当使用dataUrl中的&方式提交时,无论前台是使用encodeURI或者encodeURIComponent又或者escape把中文转码,提交到Action中都是乱码,并不是想要的%e6%b1%89%e5%ad%97这种转后编码。
Ajax返回值乱码
2010-08-27ajax返回值中有中文存在的乱码现象文章分类:Web前端ajax返回值中有中文存在的乱码现象,解决就加入下面一行代码即可response.setContentType("text/html;charset=UTF-8");我在网上找遍了解决乱码问题资料,可没有一个能行的通,无奈只好自己研究!其实解决的方法很简单,具体如下:将客户端文件的编码设置为GB2312,如下面代码所示:Html代码1.<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />在发送的URL地址中的查询字符串或者是使用POST方式发送的请求内容不要使用escape函数进行编码,切记!在服务器端的jsp文件也设置为gb2312编码格式,如下面代码所示:jsp 代码1.或者设置response的头,如下面代码所示:java 代码1.response.setHeader("Content-Type","text/html; charset=gb2312");两者原理是一样的。
最着关键的是在获取参数时应该对获取字符串进行重新编码,如下面代码所示:java 代码1.String username = new String(request.getParameter("username").getBytes("ISO8859_1"),"GB2312");其中,username为接收的参数。
直接使用out.print(username);就可以将中文返回给客户端,在客户端直接使用xmlHttp.responseText属性就可以直接使用返回的中文了!附件中我测试用的一个小例子,在tomcat6.0和resin2.1.8中通过测试!其实,还有一个一劳永逸的解决方案,就是添加一个过滤器。
jquery-ajax中文乱码
结论:jquery 1.3.2 ajax对编码问题进行过部分(见后面补充1 )处理,解决方案以jsp 为例子:ajax提交数据给jsp:ajax所在页面无任何要求,jsp页面需作两方面处理。
1.<%@page contentType="application/json" pageEncoding="UTF-8"%>或<%@page contentType="application/json" pageEncoding="gb2312"%>2.处理request.setCharacterEncoding("UTF-8")详细说明:之所以会乱码,原因很简单,两个人对话的时候,a说中文,b用英文接受,于是乎乱码矣!所以当出现乱码搞清楚谁是a谁是b很重要,然后a说话的时候让b知道应该用什么语言接收,或者b以固定的方式接收,a用b接收的语言去说,这样就万事ok了。
所以下面分成两部分去分析。
一个是ajax单纯获取网页信息的情况,一个是ajax单纯往jsp等提交数据的情况,细的来说,这里种情况有分两种情况即post和getajax单纯抓取网页a:请求的页面,b:jquery ajax这里为什么a是请求的页面,而b是jquery ajax呢?虽然是ajax向页面要东西,但是也可以理解为a(页面)要告诉ajax的内容是什么,于是乎a说,我告诉你b(jquery ajax),我的内容是......并且内容的语言是gb2312的,你来接受吧。
于是b就根据他的编码格式接收了a的内容,于是就没乱码了。
看一下下面的表格首先说明,上面说的页面编码,是指文件字符编码,而不是html里面<meta>标签内的charset=gb2312。
根据以上数据显示:ajax抓去网页的时候,乱码问题与当前页面(ajax所在页面)无关。
如何解决表单提交的中文乱码问题
如何解决表单提交的中⽂乱码问题⼀:form在前台以post⽅式提交数据:浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的⼆进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开⽹页,浏览器就以哪个码表提交数据。
数据到达服务器后,数据(98 99)要封装到request中,在servlet中调⽤Request的getParameter⽅法返回的是字符串(“中国”),⽅法内部拿到数字后要转成字符,⼀定要查码表,由于request的设计者是外国⼈,所以默认查的是他们常⽤的ISO8859-1,这就是请求数据产⽣乱码的根源。
package com.yyz.request;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//以post⽅式提交表单public class RequestDemo extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//请求数据的中⽂乱码问题request.setCharacterEncoding("UTF-8");//客户端⽹页我们控制为UTF-8String username = request.getParameter("username");//获取数据正常,输出数据时可以查阅不同码表response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开PrintWriter out = response.getWriter();out.write(username);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}⼆:form在前台以get⽅式提交数据:get⽅式提交的数据依然是浏览器⽤什么码表打开就⽤什么码表发送。
AJAX乱码解决大全
1、编码编码比较常用的有: UTF-8, GBK, GB2312, ISO-8859-1,除了 iso-8859-1之外的其它三个编码都能很好的支持中文,但它们都兼容 ISO-8859-1的编码(就是说无论编码怎么改变,只要是 ISO-8859-1中的字符,永远不会出现乱码)。
这四种编码中, GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名;而 UTF-8虽然也支持中文,但却与GB码不兼容(编码值不同)。
UTF-8使用的是可变长的 UNICODE编码,编码可能是 1位 16进制(即 ISO-8859-1中的字符,其编码也是相同的)也有可能是 2位或 3位的 16进制。
UTF-8的优点是:1、与CPU字节顺序无关 , 可以在不同平台之间交流。
2、容错能力高 , 任何一个字节损坏后 , 最多只会导致一个编码码位损失 , 不会链锁错误 (如 GB 码错一个字节就会整行乱码 ),所以在国际化处理中基本都是建议使用 UTF-8作为编码。
2、文件的编码文件编码最常使用的有两种:ANSI和UTF-8,光看名字估计你都可以猜到了,ANSI就是我们保存文件时使用的默认编码,而UTF-8则需自己设置。
对于编码的改变,我使用的工具是NOTEPAD和ECLIPSE,NOTEPAD使用最简单,只要打开文件后在另存为中选择相应的编码就行了,而且它对编码的支持非常好;而在ECLIPSE中,只要稍微设置一下就行了,打开首选项,然后选择:常规->内容类型(ContentType),在右边选中你想改变保存编码的文件类型,然后在下方的缺省编码中改变其值,最后点击更新(UPDATE)按钮即可。
而在其它的编辑器中,默认保存的内容都是GB2312或者GBK(NOTEPAD中对应ANSI).而根据前面所说的UTF-8和GBK,GB2312等的编码值是不同的这一点,可以知道,如果文件使用了UTF-8,那么字符编码就必须使用UTF-8,否则编码值的不同就可能造成乱码。
ajax中文乱码问题的总结
ajax中⽂乱码问题的总结本章解决在AJAX中常见的中⽂问题,分析中⽂乱码产⽣的原因,以及如何解决乱码问题1. HTTP协议的编码规定在HTTP协议中,浏览器不能向服务器直接传递某些特殊字符,必须是这些字符进⾏URL编码后再进⾏传送。
url编码遵循的规则:将空格转换为(+)对0-9,a-z,A-Z之间的字符保持不变。
对于所有其他的字符,⽤这个字符的当前字符集编码在内存中的⼗六进制格式表⽰,并在每个⼗六进制字节前加上⼀个百分号%。
例如,字符“+”⽤%2B表⽰,字符“=”⽤%3D表⽰,字符“&”⽤%26表⽰,字符“国”⽤%B9%FA表⽰注意,同⼀个中⽂字符在不同的字符集编码⽅式下,在内存中的编码值也是不同的,⼀个字符的URL编码是针对字符在内存中的码值⽽⾔的,采⽤不同编码的同⼀个字符的URL编码结果是不同的。
2. encodeURI()与encodeURIComponent()函数javaScript中提供了两个函数来对字符进⾏URL编码:encodeURI()与encodeURIComponent(),两者的区别在于,encodeURI函数不会对以下的字符进⾏处理: “! @ # $ & * ( ) = : / ; ? + ' ”,⽽encodeURIComponent函数会对更多的字符进⾏处理⽐如 URI的组成部分 “/” 就会被encodeURIComponent进⾏处理。
这两个⽅法对传递的值进⾏URL编码,过程是先找到字符所对应的UTF-8编码,⽐如“张三”两个字的UTF-8编码是”0xE5BCA0E4B889”(前⾯的是零x,表⽰是16进制编码).“张”是”0xE5BCA0”,”三”是”0xE4B889”,那么被转换后的结果就是”%E5%BC%A0%E4%B8%89”,注意这个转换结果与⽹页的编码没有任何关系,因为这两个函数总是拿到字符所对应的UTF-8码,然后再进⾏URL编码的。
Ajax导出文件名称是乱码问题
Ajax导出文件名称是乱码问题
【问题描述】:
通过Ajax请求导出文件,文件导出地址URL是通过URLEncode r.encode(url“UTF-8”)编码过的,但是遇到了这样一个问题,导出的文件文件内容没有任何问题,但是文件名称包含中文时文件名称显示乱码问题。
【个人猜想及验证结果】:
是编码和解码的问题,尝试了一番,并没有得到想要的结果。
【解决方案】
由于本地运行项目是部署在tomcat中,所以此结果方案现只针对tomcat。
修改Tomcat下的conf文件夹中的server.xml配置文件
修改前:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改后:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />。
JSP中AJAX表单提交中文问题的简单解决方案(GBK版本)
测试通过: Resin 3.0.18, Tomcat 5.0.30, 5.5.20; 浏览器: IE 6/Firefox 2.0.上一篇文章JSP 中AJAX 的表单提交中文问题的简单解决方案主要是针对UTF-8 版本的进行处理的, 鉴于中国大陆地区大部分还是用GBK 编码写JSP, 因此本文就针对GBK 的实践结果进行介绍.有朋友提到当AJAX遭遇GBK的尴尬里说当AJAX 使用GBK 编码后, 表单提交将出现乱码. 如前文所述, 只要全部采用UTF-8 编码, 是没有任何问题的. 那么都用GBK 呢?首先要讲的是我们的文章还是一样的原则: 尽可能少的改动原来的代码来解决中文乱码问题. 所以本文的示例没有用过滤器等方法.那么使用GBK 编码到底有没有乱码问题呢?第一个关键点就是AJAX 的表单提交代码必须正确的按照HTTP 规范实现, 即要保持原来的GET/POST 方式不变,也要保持里面的内容和浏览器提交的内容一摸一样. 以下内容摘自我编写的内部培训教材:----------------- 引用开始-----------------首先必须要介绍一下HTTP 协议和GET, POST 的工作方式.当用户在Web浏览器地址栏中输入一个带有http://前缀的URL并按下Enter后,或者在Web页面中某个以http://开头的超链接上单击鼠标,HTTP事务处理的第一个阶段--建立连接阶段就开始了.HTTP的默认端口是80.随着连接的建立,HTTP就进入了客户向服务器发送请求的阶段.客户向服务器发送的请求是一个有特定格式的ASCII 消息,其语法规则为:请求消息的顶端是请求行,用于指定方法,URL和HTTP协议的版本,请求行的最后是回车换行.方法有GET,POST,HEAD,PUT,DELETE等.在请求行之后是若干个报头(Header)行.每个报头行都是由一个报头和一个取值构成的二元对,报头和取值之间以":"分隔; 报头行的最后是回车换行. 常见的报头有Accept(指定MIME媒体类型),Accept_Charset(响应消息的编码方式),Accept_Encoding(响应消息的字符集),User_Agent(用户的浏览器信息)等.在请求消息的报头行之后是一个回车换行,表明请求消息的报头部分结束.在这个\n之后是请求消息的消息实体(Entity Body).Web服务器在收到客户请求并作出处理之后,要向客户发送应答消息.与请求消息一样,应答消息的语法规则为:应答消息的第一行为状态行,其中包括了HTTP版本号,状态码和对状态码进行简短解释的消息;状态行的最后是回车换行.状态码由3位数字组成,有5类:∙1XX 保留∙2XX 表示成功∙3XX 表示URL已经被移走∙4XX 表示客户错误∙5XX 表示服务器错误例如:415,表示不支持改媒体类型;503,表示服务器不能访问.最常见的是200,表示成功.常见的报头有:Last_Modified (最后修改时间),Content_Type(消息内容的MIME类型),Content_Length(内容长度)等.在报头行之后也是一个回车换行,用以表示应答消息的报头部分的结束,以及应答消息实体的开始.下面是一个应答消息的例子:那么GET 和POST 有什么区别? 区别就是一个在URL 请求里面附带了表单参数和值, 一个是在HTTP 请求的消息实体中.用下面的例子可以很容易的看到同样的数据通过GET和POST来发送的区别, 发送的数据是username=张三:GET 方式, 浏览器键入http://localhost?username=张三POST 方式:比较一下上面的两段文字, 您会发现GET 方式把表单内容放在前面的请求头中, 而POST 则把这些内容放在请求的主体中了, 同时POST 中把请求的Content-Type 头设置为application/x-www-form-urlencoded. 而发送的正文都是一样的,可以这样来构造一个表单提交正文:encodeURIComponent(arg1)=encodeURIComponent(value1)&encodeURIComponent(arg2)=encodeURIComponent(value2)&.....注: encodeURIComponent返回一个包含了charstring内容的新的String对象(Unicode 格式),所有空格、标点、重音符号以及其他非ASCII 字符都用%xx编码代替,其中xx等于表示该字符的十六进制数。
ajaxurl参数中文乱码解决
ajaxurl参数中⽂乱码解决最近在学习编写门户⽹站时,通过ajax的url参数传递字符串给服务器遇到中⽂乱码的问题,如果需要传递的数据不通过url直接传递,⽐如⽤jquery.post参数⽅式传递变量,则不会出现乱码问题,⽹上搜索找到如下解决⽅法:1、对js的url中的中⽂参数值使⽤两次encodeURI(),即encodeURI(encodeURI("url的中⽂参数值")),2、C#中使⽤System.Web.HttpUtility.UrlDecode(context.Request["param"], System.Text.Encoding.GetEncoding("UTF-8"));//将Url中的编码转换为简体汉字通过上述⽅法编解码就能解决中⽂乱码问题,具体原理如下:在AJAX浏览器来进⾏发送数据时,⼀般它所默认的都是UTF-8的编码.使⽤JQUERY中所提供的⽅法来做操作function verify() {//解决中⽂乱⿇问题的⽅法1,页⾯端发出的数据作⼀次encodeURI,服务器段使⽤进⾏转移成UTF-8;//解决中⽂乱⿇问题的⽅法2,页⾯端发出的数据作两次encodeURI,这个做的好处在于,不管浏览器⽤户在页⾯来设置编码,服务器所采⽤的编码来做⼀次URLencode转换成UTF-8.var url = "AJAXServer?name=" + encodeURI(encodeURI($("#userName").val()));url = convertURL(url);$.get(url,null,function(data){$("#result").html(data);});}说明:1 .encodeURL函数主要是来对URI来做转码,它默认是采⽤的UTF-8的编码.2. UTF-8编码的格式:⼀个汉字来三个字节构成,每⼀个字节会转换成16进制的编码,同时添加上%号.这⾥要做两次encodeURI的原因以及说明:其中具体的原理分析如下,假设页⾯端输⼊的中⽂是⼀个“中”,按照下⾯步骤进⾏解码1.第⼀次encodeURI,按照utf-8⽅式获取字节数组变成[-28,-72-83],对字节码数组进⾏遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD]2.第⼆次encodeURI,把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,当应⽤服务器调⽤getParameter⽅法,getParameter⽅法会去向应⽤服务器请求参数应⽤服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应⽤服务器会对这个数据进⾏URLdecode操作,URldecode操作和encodeURL操作是相反的操作,处理结果就是[%E4,%B8,%AD],并把这个值返回给getParameter⽅法然后再在服务器端中调⽤相应的URL转码⽅法或者是函数就可以把数据还原成最初页⾯发送过来的中⽂“中”了。
ASP.NET+Ajax系统设计及解决中文乱码问题方法的探讨
3 问题提 出及解 决方 法
现在就来 讲解 一下在. N E T页面 中一 段信息字符 串从 被提
以使 A S P . N E T和 A j a x能更好地应用于 中文信息系统。
l 方案 实施 的 目的及 意义
1 . 1 目 的
用 A j a x 结合 传统的 A S P . N E T ,建 立一个时效快 ,交互性 好 .用 户视 觉体验好 的 We b应用 系统 ,并解决不 同语言环 境 中 .非英文字符的乱码 显示 问题 。
交 前 、提 交 到 数 据 库 、从 数 据 库 被 读 } { I 、 示 在 浏 览 器 里这 几 个过 程 . 以说 明 数 据 字 符 串 流 被 编 码 的 过 程 , 从 中 找 到 ¨ {
通语 言运行 时 ( C o m m o n L a n g u a g e R u n t i m e ) 在 服 务 器 后 端 为 用 户 提 供 建立 强 大 的 企 业 级 We b应 用 服 务 的 编 程 框 架 具有
跨平 台性 、简单易学 、可 管理性等特点 。
2 . 2 A j a x
A j a x是 个 新 产 生 的术 语 , 为描 述 J a v a S c r i p t 的二 项 强 大 性 能 。这 二项 性 能被 G o o g l e Ma p s 和G m a i l ,( . o o g l e s u g g e s t 挖 掘
等方面尤其如此。着力 于为增强时效性 、交互性等用户视觉体
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以下是我的AJAX中文乱码的解决方案:
客户端对url进行两次转码:(str可能是中文)
Js代码
1....
2.var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+
new Date().getTime();
3.url = encodeURI(url);
4.url = encodeURI(url);
5....
服务器段对参数值进行解码:
Java代码
1....
2.String word = request.getParameter("word");
3.word = .URLDecoder.decode(word,"UTF-8");
还可以利用js进行HEX加密,java解密.
怎么不能删除留言啊,一不小心点错了,又要被扣分..
java_mike 写道
以下是我的AJAX中文乱码的解决方案:
客户端对url进行两次转码:(str可能是中文)
Js代码
1....
2.var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+
new Date().getTime();
3.url = encodeURI(url);
4.url = encodeURI(url);
5....
服务器段对参数值进行解码:
Java代码
1....
2.String word = request.getParameter("word");
3.word = .URLDecoder.decode(word,"UTF-8");
4....
java_mike 写道
我也不是很清楚,一次不行!
request.getParameter做的怪。
要是使用struts2的自动类型转换就不用encodeURI两次了
java_mike 写道
以下是我的AJAX中文乱码的解决方案:
客户端对url进行两次转码:(str可能是中文)
Js代码
1....
2.var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+
new Date().getTime();
3.url = encodeURI(url);
4.url = encodeURI(url);
5....
服务器段对参数值进行解码:
Java代码
1....
2.String word = request.getParameter("word");
3.word = .URLDecoder.decode(word,"UTF-8");
4....
String word = request.getParameter("word");
word = .URLDecoder.decode(word,"UTF-8");
其实这一步是可以简化的。
有这么几种做法,很常见:
1.客户端提交时使用encodeURI或者encodeurIcompent参数来进行utf-8编码,然后发送给服务器,如果使用post方式的话可以通过
request.setCharacterEncoding来设定用来解读参数的编码。
如果用get方式的话,使用new String(arg.getBytes("iso-8859-1"),"utf-8")的方式来转码。
2.发送ajax请求时,请使用post方式,由于AJAX默认使用utf-8的编码提交参数,因此如果不是文件上传得话,为ajax的Content-Type请求头设置"application/x-www-form-urlencoded;charset="utf-8",以此来通知服务器,客户端发送参数所使用的编码。
这样,服务器端可以直接通过String word = request.getParameter("word");来获取经过转码后的参数值,省去了request.setCharacterEncoding。
以上是我的理解,不知道是不是有错的地方,欢迎拍砖
两次encodeURI操作,是把原中文彻底转换成iso8859-1编码进行传输
这样服务器,先通一次UTF8转换,再通过一次.URLDecoder.decode(param2,"utf-8"); 就可以转成中文,这种方式也算是一种中文的终解决方法。