- 浏览: 72909 次
- 性别:
- 来自: 广州
文章分类
最新评论
开发项目用Ajax的Post方法提交信息到请求的servlet,输出遇到中文乱码,纠结了好几天,总结了网络上很多高手的心得,用了两步解决了乱码:
- 在JS端,对提交的字符串进行两次编码:
<%@page contentType="text/html" pageEncoding="gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> <title>JSP Page</title> <script type="text/javascript"> var req; function validate() { //获取表单提交的内容 var idField = document.getElementById("userName").value; //要发送的字符串数据 var content = "id=hello&message=" + idField + "&say=我是帅哥"; //重点:对content含中文字符的字符串进行两次编码 content = encodeURI(content); content = encodeURI(content); var url = "validate.do"; //创建一个XMLHttpRequest对象req if(window.XMLHttpRequest) { //IE7, Firefox, Opera支持 req = new XMLHttpRequest(); }else if(window.ActiveXObject) { //IE5,IE6支持 req = new ActiveXObject("Microsoft.XMLHTTP"); } req.open("post", url, true); req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); req.onreadystatechange = callback; //send函数发送请求,参数 req.send(content); } function callback() { //alert(req.readyState); //alert(req.status); if(req.readyState == 4 && req.status == 200) { //alert(req.status); //alert(req.responseText); var check = req.responseText; show (check); } } function show(str) { document.getElementById("info").innerHTML = str; } </script> </head> <body> <h1>Test Ajax</h1><p> <form action="" method="get" name="form"> <br> 输入用户名: <input type="text" size="10" maxlength="8" id="userName" name="name" onblur="validate()"> <span id="info"></span> <br> 输入商品名: <input type="submit" name="refer" > </form> </body> </html>
- 在servlet端,对接收的数据的进行一次解码:
package com.model; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URLDecoder; /** * * @author Gavin */ public class DoAjaxServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gbk"); request.setCharacterEncoding("gbk"); PrintWriter out = response.getWriter(); try { response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); //这里有个小问题:如果写成String put = null;将会输出一个null后面再加上增加的字符 String put = ""; for(Enumeration<String> e = request.getParameterNames(); e.hasMoreElements(); ) { String h = (String) e.nextElement(); String c = (String)request.getParameter(h); put += c; } //重点在这里,对接受到的信息进行解码 String putDecoded = java.net.URLDecoder.decode(put,"utf-8"); System.out.println(pute); out.write("message is:" + putDecoded); } finally { out.close(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }
发表评论
-
jdbc连接SQL server2000
2010-10-22 13:16 8861.假设SQL数据库“test”下有表“PRESON” ... -
javac联合编译
2010-09-14 20:25 1857假如在目录“D:\project\src\com\scau”下 ... -
常用SQL语句(在mysql上测验通过)
2010-09-11 15:59 977本文讲解《数据库处理——基础、设计与实现》第30页中3个表的创 ... -
一些编程常用的CMD命令
2010-09-09 00:05 885echo %path% 查看系统path环境变量的值 n ... -
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
2010-09-08 23:49 12468我的操作系统是WIN7旗舰版,每次开机,我可以在任务管理器里看 ... -
JDK工具 javac命令学习
2010-09-06 22:02 1047JDK工具 javac命令详解 SCJP必考的内容, ... -
jdk+tomcat安装以及配置
2010-09-06 21:57 1971安装配置JDK:其实就是 ... -
修改JSPsmartUpload组件实现无中文乱码上传下载
2010-08-26 09:26 2482使用JSPsmartUpload组件上传文件,文件名出现中文字 ... -
dom4j--XPath获取特定节点应用一例
2010-08-24 16:34 2731xml文件如下: <?xml version=&qu ... -
Ajax通过post方法向Servlet提交信息
2010-08-19 22:00 4620<script type="text/java ... -
JavaScript检查输入框是否有值再激活提交按钮的方法
2010-08-15 11:16 2432今天,想做一个“JavaScript检查输入框是否有值再激活提 ... -
dom4j写出中文乱码解决方法
2010-08-14 12:43 2204今天,学习了DOM4J,发现在eclipse中通过XMLWri ... -
XML基本语法介绍
2010-08-13 13:27 8299第一部分:文档声明 ... -
JSP+Servlet+Ajax实现后台异步检验用户信息实例
2010-08-12 21:24 21923下面介绍JSP前台表单内容通过Ajax异步提交到后台Servl ... -
java中实例化一个类的一种另类方法
2010-08-11 17:23 1515今天学习J2SE,学习了另一种类的构造方式,在调试的过程中有自 ...
相关推荐
用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会...
解决ajax异步提交后台取值中文乱码问题,提供两种解决方法
主要介绍了JQuery的Ajax中Post方法传递中文出现乱码的解决方法,较为深入的分析了Ajax的post方法出现乱码的原因,以及具体的解决方法,需要的朋友可以参考下
今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。 当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头...
需要对webconfig修改,主要是要修改页面编码格式为utf-8
Ajax使用POST提交中文乱码问题.docx
AJAX在Post中文的时候乱码的解决方法
用AJAX 来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把 resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字...
引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: 代码如下: var regid = $(‘#oregion’).combobox(‘getValue’); //var sname = $(‘#sname’).val(); ...
php+Ajax解决了post与get中文乱码的问题 后台页面可以结合mysql使用,以达到相应目的
ajax中使用javascript的send方法post参数。当用set方法是会出现中午乱码的问题,该文档说的post方法很好的解决了该问题,具体用法见文档
以前在新浪博客写过js调用AJAX时Get和post的乱码解决办法,但是使用js代码比较繁琐,我们在使用ajax进行数据交互时可以使用js的一个成熟框架—jQuery。 一个网站的设计,不管是注册登录还是分页查找,都需要提交参数...
在使用"get"时,抓取的页面最后加上编码类型,在使用post时用vbscript解决了编码问题,具体实现如下,有类似情况的朋友可以参考下哈
今天遇到一个问题,有关ajax请求中传输中文,遇到乱码的问题。 如下代码: 代码如下:function UpdateFolderInfoByCustId(folderId, folderName, custId) { $.ajax({ type: “Post”, contentType: “application/...
使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱码,经测试可以使用如下方法 这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例: 注意要对中文使用encodeURI编码两次 代码如下:...
AJAX中文问题分为两大类: 1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?name=小李”; xmlHTTP.open (“post”,url,true); 解决办法: 利用javascript的提供的escape()或...
用XMLHTTP Post Form时的表单乱码有两方面的原因——Post表单数据时中文乱码;服务器Response被XMLHTTP不正确编码引起的乱码。换句话说,本文主要解决两个问题——怎样正确Post中文内容&怎样正确显示得到的中文内容...