开始用JAVA做J2EE项目的时候, 很多人会遇到乱码问题,这个比较好解决,网上有很多成熟的解决方案,原理也广为大家所知。
我下面只简述一下这种情况下乱码的原因及解决方案:无论是Struts用的action还是、jsp页面、或者其它,最终会被编译成servlet程序由用户来调用。这些servlet是以UNICODE编码的。其实servlet用什么编码并不重要,重要的是servlet的输入和输出以同样的方案编码就不会有乱码。
常见的乱码有两种:一个是表单提交出现乱码;一个是以地址栏传参数出现乱码。
针对第一种形式的乱码,可以在每个jsp页面加上<%@ page pageEncoding="GB18030"%>注:jsp2.0适用; 或者加上<%@ page contentType="text/html; charset=GB18030"%>,“GB2312”、“GBK”、“UTF-8”也可以,反正整个系统中统一就可以。还有一种方式是使用request.setCharsetEncoding("GB18030"),可以使用Filter统一处理。
针对地址栏参数出现乱码的情况,解决方案如下(tomcat适用,其它的没有弄过):
在tomcat的配置文件:server.xml中,找到connector元素,在后面加上一个属性ERIEncoding="GB18030",GB18030是我用的编码方案,在读者的项目中,可以设定成系统中统一使用的编码方案。注意connector元素有两个,一个是针对http,一个是针对https,可以都加上。
下面讨论一下Ajax方式下的乱码问题:首先,如果整个项目使用UTF-8编码,并对request(调用xmlhttp对象的setrequestheader("contentType","text/html;charset=uft-8")方法)进行了正确的编码,就不会有乱码;如果整个项目选用了GB18030方案编码,那么一般情况下会出现乱码。产生的原因就是:xmlhttp使用了UTF-8方案对传递的参数进行编码(这也是整个项目使用UTF-8编码不出现乱码的原因)。我们可以做一个试验对此进行验证:
String str ="博客";
String newstr = new String(str.getBytes("UTF-8"),"GB18030");
如果你的系统使用的WINDOW,项目使用的是GB18030(或者GBK或者GB2312),输出newstr就会是乱码,这个乱码应该与你使用ajax提交中文“博客”所得到的乱码是一致的。 还有个问题,
String newstr2=new String(newstr.getBytes("GB18030"),"UTF-8");这样再得到一个新的字符串,这个字符串与初始的字符串str并不相同,最后一个字会是乱码,这个我不知道是什么原因,那们知道原因请告诉我一下。
这样,知道了原理就可以找方法来避免乱码了。经过试验我找到两种方法来解决Ajax的乱码问题(其实原理是一样的):
前提是使用setrequestheader方法进行了正确的编码(POST方式提交数据时,要使用xxx-application-url方案编码,不知写对了没有。呵呵。)。
一、提交中文后,服务器端使用
先使用UTF-8编码提取参数:
request.setCharsetEncoding("UTF-8");
String str = request.getParameter("param");
这样就可以得到正确的参数。
二、可以使用encodeURI进行两次编码,然后在服务器端使用以下方式(这个是我以前的解决方案,显得很土,主要是当时对乱码原理没有弄清):
String str = request.getParameter("param");
然后使用下面的方式进行解码:
java.net.URIDecode.decode(str,"UTF-8")
分享到:
相关推荐
本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**:服务器与客户端(浏览器)之间使用的字符编码格式不同,例如服务器使用GBK编码,而浏览器使用UTF-8编码...
### jQuery + ASP AJAX 中文乱码问题解决方案 在开发基于jQuery和ASP的Web应用程序时,中文乱码问题可能成为困扰开发者的一大难题。特别是在使用Ajax进行前后端数据交互时,中文字符可能会出现乱码现象,影响用户...
### Ajax 中文乱码问题详解 #### 一、引言 在进行Web开发的过程中,我们经常需要使用Ajax技术来实现异步数据交换。然而,在处理包含中文字符的数据时,经常会遇到中文乱码的问题。这个问题主要源于不同的编码方式...
首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许在不刷新整个页面的情况...
本文将深入探讨Ajax中文乱码问题的原因及其解决方案。 首先,我们需要理解Ajax乱码的根源。当JavaScript发送HTTP请求时,如果服务器和客户端之间关于字符编码的约定不一致,就会导致乱码。常见的原因包括: 1. **...
【Java认证:Ajax中文乱码问题及解决方法】 在Java Web开发中,使用Ajax进行异步数据交互时,经常会遇到中文乱码的问题。这主要涉及到字符编码的处理,特别是当Ajax请求发送的数据包含中文字符时。以下是两种常见的...
本教程将详细介绍如何解决AJAX中文乱码问题,以在Windows Server 2008环境下为例,但原理适用于其他操作系统。 首先,我们需要理解乱码产生的原因。乱码通常是由字符编码不一致引起的。服务器和客户端之间传输的...
本篇文章将对AJAX中文乱码问题进行深入探讨,并提供解决策略。 1. 乱码产生的原因 - 数据编码不一致:服务器返回的数据编码与前端页面的编码格式不一致,比如服务器使用UTF-8,而前端页面使用GBK。 - AJAX请求...
针对java web开发方面中文乱码情况的总结,基本各种情况都有了!
### AJAX中文乱码解决方案 在Web开发中,尤其是使用AJAX技术进行前后端交互时,中文乱码问题是一个常见的挑战。AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的...
为了解决AJAX中文乱码问题,常见的方法包括: 1. 使用encodeURIComponent进行编码 通过对发送的数据使用encodeURIComponent函数进行编码,可以转换数据格式,使其适应URL传输规范。然后,需要确保服务器端使用相应...
### GBK编码下jQuery_Ajax中文乱码解决方案 #### 背景介绍 在Web开发过程中,使用Ajax技术与服务器端交互数据时经常会遇到字符集编码的问题,尤其是在使用GBK编码的环境中,通过jQuery发起的Ajax请求往往会导致...
以下是一些解决Ajax中文乱码问题的方法: 1. **请求头设置**: 当发送Ajax请求时,需要确保请求头中的`Content-Type`字段正确设置。通常,我们应该将其设置为`"application/x-www-form-urlencoded; charset=utf-8...
在开发过程中,尤其是在使用C#与ASP.NET进行Web开发时,经常会遇到客户端通过Ajax向服务器端发送Post请求后,服务器端接收到的数据出现乱码的问题。这种情况不仅影响用户体验,也可能会导致程序逻辑出现问题。本文将...
今天弄了一天的Ajax中文乱码问题,Ajax的乱码问题分为两种: 1. JavaScript输出的中文乱码, 比如:alert(“中文乱码测试”); 解决的办法比较简单,就是把jsp里所有的charset和pageEncoding的值都设置成相同...
解决JQuery AJAX中文乱码问题的步骤如下: 1. **设置请求编码**:在发送AJAX请求时,确保请求头中的`Content-Type`设置为`application/x-www-form-urlencoded;charset=UTF-8`。对于JQuery,你可以这样做: ```...
AJAX中文问题分为两大类: 1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?name=小李”; xmlHTTP.open (“post”,url,true); 解决办法: 利用javascript的提供的escape()或...
在实际应用中,我们常常会遇到Ajax与服务器交互时出现中文乱码的问题,尤其是在发送和接收中文数据时。这个问题主要涉及到字符编码的处理,解决起来需要对HTTP协议、字符编码原理以及Struts框架的工作机制有一定的...