AJAX传输中文在各平台的兼容性问题和解决方案
收藏
我主要针对IE和FF进行讨论,google的chorme和IE相近。
首先解释几个字符集转码的只是要点已方便后面阐述。
1.java
平台在JVM中运行的字符串为unicode,jsp或servlet的getParamter方法将传进来的不管什么编码的字符串都以ISO-
8859-1编码转成unicode,在输出时在使用ISO-8859-1转回输出,这样在程序开发中不会出现乱码,但在web开发中就非常容易出现乱码
2.
在ajax传输中文字符是,FF和IE所采用的机制是不同的,FF是将所有的字符自动转化成utf-8再进行传输,而在接受字符串是先从头部获取字符集类
型,如果没有在判断<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />中的
字符集类型,而IE恰恰相反,在ajax传中文时,使用平台默认字符集,中文平台的话一般式是GBK,而在接受字符串是先判读<meta
http-equiv="Content-Type" content="text/html; charset=utf-8"
/中的字符集,在判读头部信息中的字符集类型
好了,这两点理解以后,下面解释起来就方便了。
(1)encodeURI:
在IE和Chrome中,ajax发送的是平台默认的字符编码GBK,通过encodeURI将GBK和一些特殊字符转换成utf-8(想了解
encodeURI的转化详情,可以看我前一篇blog),而在FF中,发送的编码默认为utf-8,所以GBK的编码有FF自动转为utf-8并进行发
送,对utf-8编码调用encodeURI方法,则不会改变字符的编码(因为它已经是utf-8了,再编一次也一样)
(2)一般在服务器端会自动对传入的字符串进行url解码
(3)request.getParameter方法又使字符串用ISO-8859-1解码
(4)使用String.getByte("ISO-8859-1")编码为字节数组
(5)在使用new Stirng(str,"utf-8")解码为unicode,然后就可以在JVM中处理了,和一般在程序中创建的字符串一样了
(6)如果你使用System.out.print输出的话,JVM回根据OS默认字符集编码输出
(7)
如果你要输出到html中的话,为了各平台的兼容性,使用response.setCharacterEncoding设置头部字符集,在html页面中
也使用<meta http-equiv="Content-Type" content="text/html;
charset=gb2312" />指定页面编码
说到这里,整个过程大概就是这样了,下面show一下code,来作为这篇文章的结尾把
html:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>My JSP 'MyJsp.jsp' starting page</title>
</head>
<script type="text/javascript">
function createXHR(){
var request;
try{
request = new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
try{
request = new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
try{
request = new XMLHttpRequest();
}catch(e){
alert('创建XMLHttpRequest失败');
return null;
}
}
}
return request;
}
</script>
<script type="text/javascript">
var xmlHttp = createXHR();
var url = 'servlet/HandleServlet?name=胡乐费';
if(xmlHttp != null){
xmlHttp.open('GET',encodeURI(url),true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}else{
alert('创建失败');
}
function updatePage(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
alert(xmlHttp.responseText);
}
}
}
</script>
<body>
<input type="button" name="btn" value="send" />
</body>
</html>
服务器端servlet:
package com.mst.im;
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;
public class HandleServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
response.setContentType("text/plain; charset=GBK");
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"utf-8");
System.out.println(name);
PrintWriter out = response.getWriter();
out.print(name);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
胡乐费所有
分享到:
相关推荐
**Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与...在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决方案的有效性和广泛适用性。
### Ajax中文乱码问题解决方案 在进行Ajax编程时,经常会出现中文乱码的问题,这主要是因为客户端和服务端之间编码设置不一致导致的。为了解决这个问题,我们需要从多个角度出发来确保数据传输过程中字符编码的一致...
在解决跨域问题时,还需要注意其他的一些问题,如安全性问题、兼容性问题等。例如,在使用中间层过渡的方式时,需要确保中间层的安全性,以免中间层被恶意攻击。同时,在使用标签时,需要确保标签的src属性不会被...
在IT领域,特别是Web开发中,字符编码的处理是一大挑战,尤其是在跨浏览器、跨平台的环境下,如在Ajax请求中遇到的FireFox与IE之间的乱码兼容问题。本文将深入探讨这一问题,并提供详细的解决方案。 ### Ajax与字符...
### jQuery + ASP AJAX 中文乱码问题解决方案 在开发基于jQuery和ASP的Web应用程序时,中文乱码问题可能成为困扰开发者的一大难题。特别是在使用Ajax进行前后端数据交互时,中文字符可能会出现乱码现象,影响用户...
总结,解决Ajax乱码问题的关键在于确保编码的统一,从文件编码、请求头、服务器端处理到响应头,每个环节都要设定为UTF-8,以保证数据在传输和处理过程中的正确性。同时,对编辑器的配置也很重要,确保它保存文件时...
2. **兼容性测试**:修改源码后,应进行全面的测试,确保修改不影响jQuery的其他功能,并检查是否存在其他潜在的兼容性问题。 3. **备份源码**:在修改源码前,请务必做好备份工作,以防万一修改失败或引入其他问题...
乱码问题主要出现在数据的输入、传输和展示过程中,涉及到编码格式的选择和一致性。以下是一些解决此类问题的关键点。 1. **编码理解** - **字符编码**:常见的字符编码有UTF-8、GBK、GB2312和ISO-8859-1。UTF-8是...
- 兼容性问题:不同的浏览器可能对AJAX支持程度不一。 - 可访问性降低:依赖JavaScript,禁用JavaScript的用户无法使用。 - SEO挑战:搜索引擎爬虫难以理解动态内容。 - 回退机制:对于非JavaScript环境需提供...
考虑到的兼容性和问题 - **跨域问题**:同源策略限制了Ajax只能向同源(协议、域名、端口相同)的服务器发送请求。为解决这个问题,可以使用CORS(跨源资源共享)或者JSONP(JSON with Padding)。 - **IE6的...
在Web开发过程中,数据传输是不可或缺的一部分,而AJAX作为一种无需重新加载整个页面的情况下就能与服务器交换数据的技术,被广泛应用于动态数据交互场景中。然而,在处理中文等非ASCII字符时,经常会遇到一个令人...
在开发Web应用时,AJAX(Asynchronous JavaScript and XML)技术常常被用来实现页面的无刷新更新,提高用户体验。...请根据实际情况调整代码,因为不同的服务器环境和数据库配置可能需要不同的解决方案。
- 《Ajax 探密 (Ajax Hacks ).rar》:这是一本关于Ajax技术深入实践的书籍,包含了多种Ajax技巧和解决方案。 - 《AJAX——新手快车道.rar》:适合初学者入门,快速掌握Ajax基本操作。 - 《AJAX开发简略[1].part1-5....
虽然这个问题主要涉及Ajax的中文乱码解决方案,但提到了C++与Java的对比。C++和Java的设计理念有所不同,C++强调兼容性与性能,而Java则追求简单性和跨平台性。C++的复杂性源自其对C语言的兼容性,这使得C++具备了...
考虑到不同浏览器可能对URL编码和解码的处理略有差异,测试你的解决方案在各种主流浏览器(如Chrome、Firefox、Safari、Edge等)中的表现,确保在所有环境中都能正常工作。 综上所述,解决JSP中Ajax GET请求的中文...
**Ajax中文乱码问题详解与解决方案** 在开发Web应用程序时,尤其是在处理中文字符时,Ajax中文乱码问题是一个常见的困扰。这是因为不同的系统、浏览器、服务器和文件可能使用不同的字符编码,导致数据在传输过程中...
除了基础技术和案例,这个资料可能还涉及了Ajax的局限性和解决方案,例如跨域问题、浏览器兼容性问题,以及如何使用jQuery等库简化Ajax编程。对于初学者,了解这些问题及其解决策略是非常有价值的。 最后,学习Ajax...
随着Web技术的发展,Fetch API和Promise的出现为Ajax提供了更现代的解决方案。Fetch API提供了更简洁的接口,Promise则帮助管理异步操作,使得错误处理更为优雅。 总结,Ajax中文手册详细涵盖了Ajax的基本概念、...
- 考虑使用库或框架,如jQuery,它可以帮助处理这些兼容性问题。 #### 四、实现Ajax技术的关键步骤 **1. 动态更新页面内容** - Ajax的核心在于能够动态地从服务器获取数据,并更新网页的一部分,而无需刷新整个...