XMLHttpRequest对象解决中文乱码问题
2016-01-08 18:20
856 查看
在学习ajax中XMLHttpRequest对象扩展问题中,XMLHttpRequest可以用来解决web访问中文乱码问题,对此作出总结。
(2)响应数据中包含中文,编码设置错误导致浏览器中看到的结果是乱码
不论是请求数据还是响应数据,乱码的根源在于设置对外部脚本文件的编码方式,即charset,默认的charset属性是“ISO-8859-1”。
保证页面端定义的charset和http响应头的Content-Type中定义的charset一致即可。
特例:IE6中XMLHttpRequest对象在页面端和http响应头的Content-Type中定义的charset都为GB2312时,中文响应数据出现乱码。解决办法:
(1)http响应头的Content-Type中charset设置为utf-8
(2)仅仅使用”MSXML2.XMLHTTP”,”Microsoft.XMLHTTP”这两个中的一个来创建XMLHttpRequest对象。代码如下:
二、请求数据乱码
分别从页面端和服务器端着手:
页面端:利用javascript中的encodeURI进行两次编码处理
服务器端:获取到的请求数据通过URLDecode类的decode方法按照utf-8的方式进行decode解码处理。
代码如下:
页面端:
服务器端:
问题解决原理:
即通过encodeURI和URLDecode使得请求中文字符不出现乱码。 综上所述,在XMLHttpRequest使用的5个步骤中添加代码则可以实现解决中文乱码的问题。
出现乱码的原因:
(1)请求数据中包含中文,服务器端程序接受错误导致乱码。(2)响应数据中包含中文,编码设置错误导致浏览器中看到的结果是乱码
不论是请求数据还是响应数据,乱码的根源在于设置对外部脚本文件的编码方式,即charset,默认的charset属性是“ISO-8859-1”。
解决方案:
一、响应数据乱码保证页面端定义的charset和http响应头的Content-Type中定义的charset一致即可。
特例:IE6中XMLHttpRequest对象在页面端和http响应头的Content-Type中定义的charset都为GB2312时,中文响应数据出现乱码。解决办法:
(1)http响应头的Content-Type中charset设置为utf-8
(2)仅仅使用”MSXML2.XMLHTTP”,”Microsoft.XMLHTTP”这两个中的一个来创建XMLHttpRequest对象。代码如下:
var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; //将其中的对象减少为这两个 for (var i=0; i<activexName.length; i++ ){ try{ var xmlhttp = new ActiveXObject(activexName[i]); break; } catch(e) { }
二、请求数据乱码
分别从页面端和服务器端着手:
页面端:利用javascript中的encodeURI进行两次编码处理
服务器端:获取到的请求数据通过URLDecode类的decode方法按照utf-8的方式进行decode解码处理。
代码如下:
页面端:
//回调方法代码 xmlhttp.onreadystatechange = callback; //记忆一个固定用法,获取文本框中用户输入的内容 var userName = document.getElementById("UserName").value; //两次encodeURI编码 username = encodeURI(encodeURI(userName));
服务器端:
Protected void processRequest(HttpServletRequest request, HttpServletResponse response) Throws ServletException, IOException { response.setContentType("text/html;charset = utf-8"); printWriter out = response.getWriter(); try{ String old = request.getParameter("name"); If(old == null) { out.println(“用户名不能为空”); <span style="white-space:pre"> </span> } else { <span style="white-space:pre"> </span> String name = URLDecoder.decode(old,”utf-8”); System.out.println(name); If(name.equals(“zzh”)) { out.println(“用户名[” + name + “]已经存在,请使用其他用户名”); } else{ out.println(“用户名[” + name + “]尚未存在,可以使用该用户名”) } } } finally { <span style="white-space:pre"> </span> out.close(); } }
问题解决原理:
即通过encodeURI和URLDecode使得请求中文字符不出现乱码。 综上所述,在XMLHttpRequest使用的5个步骤中添加代码则可以实现解决中文乱码的问题。
相关文章推荐
- Ajax中XMLHttpRequest对象的使用
- 基于Restful架构规范的Android的网络请求框架Retrofit
- TCP/IP协议三次握手与四次握手流程解析
- 网络编程通讯的要素
- android使用AsyncHttpClient上传图片以及参数到服务器
- HTTP的请求方法
- HTTP返回状态码详解
- 网络请求库Volley详解
- 关于<meta http-equiv="X-UA-Compatible" content="IE=edge" />问题
- Retrofit忽略Https安全验证
- 深度信任网络的快速学习算法(Hinton的论文)
- ios9 plist 网络允许
- 1.4.2 HTTP ERRORS AND REDIRECTS(HTTP 错误和重定向)
- tcpdump filters for HTTP GET & HTTP POST
- HttpClient HttpURLConnection设置代理IP和端口
- 网络编程归纳总结三阶段
- 网络编程归纳总结二阶段
- 模拟器网络请求报 1005
- 网络编程归纳总结一阶段
- TCP编程——实现多人聊天室功能