Aiax乱码如何解决

2022-09-29 09:04:11

1.JSP、STRUTS等中文乱码的解决方法其实解决的只有一种:

request.setCharacterEncoding(编码);

只有一种方法,但我们有不同的方法,初学者会直接在JSP页面中使用,而有经验的程序员会使用过滤器。现在的方法是说过滤器。这里统一使用UTF-8编码为例进行说明。具体过程就不多说了,网上有很多教程。有点懒,把TOMCAT抄过来就行了。TOMCAT 目录下的“webapps” jsp-examples “WEB-INF” classes “filters” 找到SetCharacterEncodingFilter.java 这个类进入你的程序并配置映射路径。配置完你的垃圾问题基本解决了。但我想映射路径警告是你不能使用'*'

Filter-Mapping > filter-name > Set Character Encoding </ filter-name > servlet-name > * </ servlet-name > </ filter-Mapping >

如上如此配置(也许是网上大部分教程的方法,我记得也对我造成了伤害),你可能只解决了JSP乱码,需要解决STRUTS的乱码映射*.do或servletActionName。设置初始化参数编码中的值就行了。

init-param > param-name >编码</ param-name > param-value > UTF-. 8 </ param-value > </ init-param >

当然,最重要的是要记住,按照前面提到的方法,你使用的保存文件的编码编辑器的更改必须与使用的字符编码保持一致。

在JSP的内容中,比如网上的教程或者使用说的那种招数,把所有的页面加到最上面:

<% @Page Language = "Java" contentType = " text / HTML; charset = UTF - .8 "     pageEncoding = "UTF - .8 " %>

至此,相信JSP、ACTION乱码都不太可能出现。

2.资源文件乱码的解决办法

资源文件大家都知道国际支持是不可或缺的,如果资源文件出现乱码也很可怕?其实资源文件乱码是一个很好的解决办法,其原因是因为使用UTF-8编码的文件作为JSP代码,不会导致资源文件发生相应的变化,所以只要保存资源文件的编码即可改正,垃圾问题就解决了。当然,你要使用中文native2ascii命令进行适当的转换。

3.调用JS时,JS内容乱码的解决方法。

其实JS乱码还是跟编码文件有关系,如果JS中有中文,那么保存JS文件编码必须现在调用这个页面编码相同的JS否则,所有你要从中文JSP传过来的页面JS出现正常. 可见对于JS出现乱码调用是最容易解决的。

4.AJAX提交数据乱码、返回数据乱码的解决办法

本来的目的,当然是跟AJAX相关的编码乱码问题,其实很多人和我一样想到文件编码设置,在编码设置requet访问数据集在响应数据返回编码一切都会很顺利,但一切都是徒劳的,讨厌的垃圾再次出现在你面前。N 之后你尝试了各种方法,包括 JS 自己的 escape、unescape 方法,你发现屏幕上仍然疯狂出现垃圾。

其实这个方法试过N多之后,很多人都找不到很简单的解决方法,而它的答案就在于我们处理过的JSP乱码。再来看看经典的AJAX请求方式代码

xmlhttp.open(“POST”,URL,异步);xmlhttp.setRequestHeader("内容-类型""text/HTML");xmlhttp.send(参数);

通过前面的描述,你现在不知道辨别没有。不知道是受网上教程的影响还是其他方面的影响,setRequestHeader 和是同年的,没有人希望它改变过去,但问题只是出了这个地方。回想一下JSP页面的内容编码设置,这里有这样一个:

contentType = "文本/html;字符集 = UTF-8"

问题现在知道了,所以我们需要把代码改成第二句:

xmlhttp.setRequestHeader ("Content-Type""text/html; charset = UTF-8");

最后,不要忘记在返回数据时也设置:

response.setContentType(“文本/XML”);response.setCharacterEncoding("UTF-.8");

如果要问为什么,那么,其实我们可以看成是一个临时的xmlhttp页面,它是由浏览器动态生成的,主要作用是在后台获取请求的数据(可以看成一个高级iframe )。所以对于普通的编码设置页面,应该是一样的设置。servlet中的返回数据为什么设置contentType和encoding其原因是一样的。众所周知,它是jsp servlet的最后一种形式,而jsp top设置的内容其实就是让生成的servlet生成这么两句话:

response.setContentType(“文本/HTML”);response.setCharacterEncoding("UTF-.8");

pageEncoding现在jvm描述了这个页面的内容保存你想用什么编码(生成后跟CLASS有关系)。因此在 servlet 响应中设置编码是被授予的。

response.setContentType ("text/xml; charset = UTF-8");
response.setHeader("Pragma""no-cache");//HTTP 1.0  response.setDateHeader("Expires"0);//防止在代理服务器缓存  PrintWriter out = response.getWriter();out.write (outXML);out.flush();out.close();