`
withyou
  • 浏览: 456715 次
社区版块
存档分类
最新评论

当AJAX遭遇GBK的尴尬

阅读更多

我在之前的一篇文章《struts,ajax乱码解决方案》中讲到ajax提交乱码的解决方案。这个方案在utf-8的编码下,不管提交或获取都没有变成乱码,但当你的客户端是GBK编码时提交就会出现乱码(获取时不会)。BeanSoft 说用encodeURIComponent保险,呵呵,这个不是我没试过,从一开始我就试过了encodeURIComponent ,escape,encodeURI,但最后出来的结果都没我说的那种好。它们使用的结果如下:
escape  后提交,getParameter出来的是null,
encodeURI 后提交,和没使用用的时候是一个样,
encodeURIComponent  后提交,包含特殊字符的请求都无法取得正确的值。

使用GBK编码提交后的数据在使用服务器端用new String( value.getBytes("gbk"), "utf-8")后部分可以恢复正确的中文,但有一部分无法恢复,这个原因估计是AJAX提交时设置了编码为UTF-8,但我字符的实际编码是GBK,所以在提交用用request.getParameter()获得的数据是用UTF-8的编码在GBK的字符集中找字符,像我在《struts,ajax乱码解决方案》中说的那样,UTF-8的编码可能有1位2位或3位16进制,如果它这个编码刚好是2位的话,那在GBK可以找到正确的字符(但并不是正确的),但如果是三位呢?那就惨了,它后面的字符全部就会变成乱码,比如%6D%51%C5 %E5%23%1C分别表示一个UTF-8编码的中文字符,那如果在GBK中,就会把它当成三个字符去查找,当然肯定是找不到的,有些找到的也是你读都读不出来的。用new String( value.getBytes("gbk"), "utf-8")后就是用GBK的编码在UTF-8的字符集中查找字符,如果刚好你的字符在UTF-8编码中全部是2位的话,那就能正确恢复,如果不是的话。。。。。。

现在还没找到在GBK编码下比较好的解决方案,但今天看到BeanSoft 的一篇文章《JSP 中 AJAX 的表单提交中文问题的简单解决方案》说到使用BASE64的方法,这个倒是没有试过,过两天放假的时候就试一下,如果成功了就跟大家共享一下。

PS:因为项目用也用到了FILTER,在提交后第一时间会被改变字符编码,不知道是不是这个增加的乱码解决的复杂性,当然我也试过在getParameter之前改变它的编码回utf-8,但结果是一样的。



errorfun 2006-12-30 13:34 发表评论
分享到:
评论

相关推荐

    GBK编码下jQuery_Ajax中文乱码解决方案

    当我们在GBK编码环境下使用jQuery的Ajax功能时,如果请求体中含有中文字符,这些中文字符在传输过程中可能会被误译为其他字符,导致接收方接收到的数据与发送方发出的数据不一致,即所谓的“乱码”现象。这一问题的...

    jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)

    在Web开发过程中,当我们处理使用GBK编码的页面进行表单提交时,特别是当使用jQuery的AJAX方法进行异步请求时,我们可能会遇到字符编码问题。UTF-8编码广泛应用于国际化场景,但GBK由于历史原因在中国等地区仍在广泛...

    AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX

    AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX

    Ajax中文手册 API

    很不错的Ajax开发草考文档,方便快捷1. AJAX介绍AJAX是一种运用JavaScript和可扩展标记语言(XML),在网络浏览器和服务器之间传送或接受数据的技术。2. AJAX实例AJAX可以用来创建更多交互式的网络应用程序。3. AJAX源...

    AJAX原理 原理 AJAX

    而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了AJAX中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用AJAX,比如说MSDN网站菜单中的...

    js实现GBK编码,避免默认utf-8编码

    前端页面通过ajax发送请求,参数都是默认使用utf-8编码格式对参数进行url编码,这样的后果就是,当后台页面如果使用gbk编码的话,会出现乱码的情况,然后网上找到一个大神写的gbk.js. 但是里面没有做出详细介绍,这里...

    ajax代码 ajax代码

    它处理用户的交互,当用户触发某个事件(如点击按钮)时,JavaScript会启动Ajax请求。 2. **XMLHttpRequest对象**:是Ajax的核心,它允许JavaScript在不刷新整个页面的情况下与服务器进行通信。通过这个对象,我们...

    AjaxRequest(Ajax使用包)

    4. **事件监听**: 监听请求的状态变化,如`onreadystatechange`事件,当服务器响应时触发。 ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 请求...

    ajax乱码解决方案

    因此,当Ajax发送或接收UTF-8编码的数据时,理论上不应出现乱码。 然而,乱码问题可能源于以下几个方面: 1. **服务器响应头设置不正确**:服务器应明确指定返回数据的字符编码。例如,在PHP中,可以使用`header('...

    Java Ajax分页,jsp ajax分页

    当用户触发分页事件时,这段代码会使用AJAX发送请求到后台Servlet。请求可能包含当前页数、每页显示的记录数等参数。收到服务器的响应后,JavaScript代码将新数据插入到页面的适当位置,完成动态加载。 对于数据库...

    ajax教程

    - **接收响应**:通过监听`onreadystatechange`事件,当`readyState`属性变为4(表示请求已完成)且`status`为200(表示成功)时,读取`responseText`或`responseXML`获取响应数据。 **3. 数据格式** 虽然名字中有...

    Ajax中文乱码问题解决方案

    在IT行业中,Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下,与服务器交换数据并更新部分网页的技术。然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致...

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

    ASP.NET AJAX程序设计——第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit 源代码

    本卷从最易于理解和使用的那部分入手,介绍ASP.NET AJAX框架中能够与传统ASP.NET无缝对接的服务器端部分,包括服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit。这部分内容不需要读者有任何的客户端...

    php+ajax例子

    6. JavaScript监听请求状态,当请求完成时,解析返回的数据,并更新页面上的相应元素。 在压缩包“20120713”中,可能包含了这个示例的源代码,包括HTML文件、JavaScript脚本以及PHP处理文件。通过查看这些文件,你...

    jquery+ajax例子

    在IT行业中,jQuery和Ajax是两个非常重要的技术,它们在构建动态、交互性强的Web应用程序时发挥着关键作用。jQuery是一个高效、简洁的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。Ajax...

    Ajax(Ajax使用js包)

    使用Ajax实现从服务器读取数据,包括Ajax实现的详细步骤

    ajax+json实例

    4. 监听状态变化,当状态为4(完成)时,处理服务器返回的数据。 **二、JSON介绍** JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,数据格式直观,...

    ajax 基础教程源代码

    ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础...

Global site tag (gtag.js) - Google Analytics