JSP中,AJAX使用POST方式提交中文乱码问题解决

2023-11-02

 

/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客:http://blog.csdn.net/wallimn
时间:2006-11-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/

  今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。
  当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape函数。
  使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。
  但对于POST方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。
  今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。
  我的例子涉及两个页面,一个是初始页面,一个是AJAX请求处理页面。
  初始页面内容如下(hello.jsp):
/
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>AJAX提交页面</title>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
   <script type="text/javascript">
    function justdo(){
  var post="name=张三丰&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
  post = encodeURI(post);
  post = encodeURI(post);//两次,很关键
  var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');
  var URL = '<%= path%>/page/act.jsp';//文件名需要调整成测试时的相应位置?
  xmlObj.open ('post',URL,true);
  xmlObj.setrequestheader("cache-control","no-cache");
  xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
  xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
   }
   </script>
  </head> 
  <body>
  <input type="button" value="提交" οnclick="justdo()"/>
   </body>
</html>
/
  ajax请求处理页面(act.jsp)的内容如下:
/
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="java.net.URLDecoder"%>
<html>
  <head>
    <title>ajax deal</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
  </head>
  <body>
  <%
  //遍历输出参数内容。
  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
   String h = (String) e.nextElement();
   String v = request.getParameter(h);
   String mm =  java.net.URLDecoder.decode(v, "UTF-8");
   System.out.println("请求参数: " + h + " = " + mm);
  }
   %>
  </body>
</html>
/
  分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数java.net.URLDecoder.decode()就可解出原始的正确的信息。
  以上分析纯属个人看法,不知是否正确。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSP中,AJAX使用POST方式提交中文乱码问题解决 的相关文章

  • Java 中是否可以覆盖对象数组的“toString”?

    Java 中是否可以覆盖对象数组的 toString 例如 假设我创建了一个简单的类 User 哪个类别并不重要 因为这是一个普遍问题 是否有可能 一旦客户端创建了User 数组和客户端使用System out print array 它不
  • Comet,使用 jquery 教程进行长轮询 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望通过使用 ajax 和 jquery 将 comet 长轮询功能添加到我的网站 因为我不熟悉 j
  • 使用带有可变参数字符串的函数

    我正在研究带有可变参数的函数 并决定创建一个函数来创建带有参数的向量 我的功能是创建一个int矢量工作 vector
  • 使用 jQuery 的 AJAX 请求不起作用

    所以我是 jQuery 的新手 我正在尝试设置一个带有选项卡的 html 页面 每个选项卡应显示不同的 html 页面 如下所示 div a href page1 html div class tabdiv tabActive Page1
  • JavaScript - 替换 html 字符串中的特定单词索引

    我在 JS 字符串操作方面面临着一项具有挑战性的任务 有一个 HTML 字符串 我需要在其中替换特定单词索引处的单词 单词索引是忽略 HTML 标签时单词的编号 例如 下面是 HTML 字符串 span style font family
  • 使用 Ajax 和 PHP 上传图像

    我想将图像上传到我的服务器 并控制 HTML 代码中的 PHP 回显 为此 我想使用 jQuery Ajax 但我不知道如何使用 Ajax 将图像发送到 PHP 这是一个大学项目 所以我不能使用任何类型的插件 我的实际代码 HTML
  • str_getcsv 未正确解析数据

    我对 PHP 的 str getcsv 函数有疑问 我有这个代码
  • 打印出 Linq 表达式树层次结构

    The 动态语言运行时 DLR http msdn microsoft com en us library dd233052 aspx有一些非常酷的表达式代码 包括一些非常好的代码来打印我想使用的表达式树 以便 int a 1 int b
  • ajax 和相对 url

    我真的不明白这个 我有以下 获取 请求 ajax url api getdirectories dataType json success function data Do stuff 这是我的临时服务器向我提供的页面 http atlas
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数
  • 使用 jQuery 和 AJAX 跨域 PHP 调用

    我遇到一个问题 我使用的服务器未配置为允许 PHP 或 CGI 并且我需要使用从该服务器上的表单收到的变量向所有者发送邮件 例如一般查询 反馈表单 有谁知道我如何在配置为使用 PHP 的另一个域上调用一个简单的 PHP 文件 然后执行mai
  • 在 C# 中替换部分文件名

    我有一个文件夹 pdf文件 在大多数文件的名称中 我想用另一个字符串替换特定字符串 这是我写的 private void btnGetFiles Click object sender EventArgs e string dir tbGe
  • Laravel 5.3 中 ajax POST 的最小工作示例

    有人可以用完整的最小示例解释 Laravel 5 3 中的 ajax post 方法吗 我知道网络上有一些资源 但我错过了一个简洁 直接的最小示例 我认为您对模型 控制器 视图范例有基本的了解 对 Laravel 有基本的了解 并对 Jav
  • 如何制作将 HTML 文件加载到 div 中的 XMLHttpRequest?

    我正在尝试做一个XMLHttpRequest从外部文件加载 HTML 并将文件内容插入到div 当我运行该函数时 它会在所有正文中插入 HTML 这是不够的 My code gt HTML
  • 使用 AJAX 调用生成 PDF 文件

    我正在尝试使用 Rails3 中的 AJAX 调用生成 PDF 文件 以下代码生成一个我使用 PRAWN gem 创建的 PDF 文件 我不希望用户在订购之前查看 PDF 因此 目标是在服务器中创建 PDF 文件 非常感谢任何想法或想法 使
  • 如何从 facebook javascript SDK 获取个人资料图片?

    我正在尝试从 Facebook 获取个人资料图片 现在我正在从 Facebook 获取所有信息 但无法获取用户的个人资料照片 这是我的代码 function getFBData FB api me function response fbi
  • 如何将变量从 JavaScript 传递到 PHP?

    我正在使用 jQuery 来计算价格 这是我的 JavaScript 的一小段 Prices radio var curLam gloss input name lamination click function var gloss 5 v
  • 当变量更新时动态刷新模板的一部分golang

    在Golang中 当变量更新时可以刷新模板的一部分吗 例如 我们可以在 Angular js 中找到这一点 基本上在我的代码中 我通过 ajax 中的邮政编码查找地址 它显示我找到的该邮政编码的用户列表 Here is a sample o
  • 如何将 JavaScript 库包含到 Spring MVC 项目中(例如 jQuery 或 Dojo)

    我在这里阅读了超过 5 个相关主题 但无法找到答案 分步说明 到目前为止 我已经有了 STS Spring MVC 模板结构并尝试将jquery js在我的项目中的某个地方 不幸的是 没有人说它应该在哪里 那么 请说 将 jquery js

随机推荐

  • 全连接层结构理解

    以上图为例 我们仔细看上图全连接层的结构 全连接层中的每一层是由许多神经元组成的 1x 4096 的平铺结构 它是怎么样把3x3x5的输出 转换成1x4096的形式 从上图我们可以看出 我们用一个3 3 5的filter去卷积激活函数的输出
  • React Hooks 组件化开发(常用)

    本文章视频地址 视频链接 一 React组件分类 二 Hook函数概览 Hook 是 React 16 8 的新增特性 并且只能运用到函数组件中 1 useState 作用 在函数组件中使用状态 修改状态值可让函数组件更新 类似于类组件中的
  • python settings.json_vscode python 之 settings.json

    python jediEnabled true python linting flake8Enabled true python formatting provider yapf python linting flake8Args max
  • ubuntu: Linux常用指令---grep(搜索过滤)

    1 基础命令 Linux系统中grep命令是一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹 配的行打印出来 grep全称是Global Regular Expression Print 表示全局正则表达式版本 它的使用权限是所有
  • 通过adb pull和adb push 手机与电脑之间传输文件

    一 将手机卡中的某个文件复制到电脑 1 手机连接电脑后 在命令行输入 adb devices 获取到设备序列号后说明手机已经和电脑连接成功 2 输入 adb pull 手机存储路径 电脑路径 adb pull sdcard xxx User
  • Android嵌入式开发之NDK初级入门 粘贴可用阅读可懂

    前言 NDK开发 其实是为了项目需要调用底层的一些C C 的一些东西 另外就是为了效率更加高些 如果你在Eclipse ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin 配置Cygwin 然后需要编译生成 相当的蛋疼 要么
  • react -元素变量

    使用变量来储存元素 它可以帮助你有条件的渲染组件的一部分 而输出的其他部分不会更改 import React Component from react export default class If extends Component re
  • java 中MongoDB Plugin,MongoKit的使用

    这个属于他人的笔记 觉得挺好 所以存了起来 原文出处 https blog csdn net clm article details 51955332 简介 因为自己工作中会需要用到MongoDB 为了在JAVA上用MongoDB用得更舒服
  • Qt调试

    Locals and Expressions Whenever a program stops under the control of the debugger it retrieves information about the top
  • Unity3D---Vuforia is not enabled解决方案

    在Unity3D实现VR的过程中 需要选择Vuforia官网自己创建的Database中的Target 此时 有的Unity3D会出现如下错误 解决办法如下 选择Edit Project Settings Player 将XR Settin
  • 图像识别小车(jetson nano部分)——电赛学习笔记(3)

    目录 零 前言 1 jetson nano购买商家及技术支持 2 相关环境配置 3 做好系统备份 一 vscode远程ssh操作 局域网连接 二 板载摄像头教程 三 运行例程 四 GPIO使用 GPIO库的API用法 1 导入库 2 引脚编
  • Git 命令行提交代码详细操作

    Git 命令行提交代码操作 安装git后 鼠标右键打开Git Bash 1 查看本地git绑定的用户名和邮箱 git config user name git config user email 2 修改本地git绑定的用户名和邮箱 全局
  • 数据挖掘(知识图谱2019)

    领域 二级分类 三级分类 data mining 数据挖掘 time series analysis 时间序列分析 data streams 数据流 time series data 时间序列数据 real time 实时 time ser
  • Unity之Matrix4x4 矩阵

    Matrix4x4 矩阵 Struct A standard 4x4 transformation matrix 一个标准的4x4变换矩阵 A transformation matrix can perform arbitrary line
  • Qt中关于定时器timerEvent和QTimer

    1 Qt 定时器类 QTimer 在进行窗口程序的处理过程中 经常要周期性的执行某些操作 或者制作一些动画效果 使用定时器类 QTimer 就可以解决 使用 只需创建一个 QTimer 类对象 然后调用其 start 函数开启定时器 此后
  • C#实现多语言切换(通过Resource语言包文件实现)

    点我 下载多语言切换项目最全源码 1 先说说Resources语言包文件是怎么来的 通过Visual Studio 命令提示工具将txt文件转换成resources文件 具体操作 a 打开Visual Studio 命令提示工具 然后输入你
  • EXT2.2 grid行不能复制信息的解决方法

    在ext all js的后面加入如下js if Ext grid GridView prototype templates Ext grid GridView prototype templates Ext grid GridView pr
  • 当下用途最广的计算机语言,目前为止国际上最主流的计算机编程语言是什么?...

    看主流的观察角度 如果是这些语言编写的软件的用户数量最多 那么肯定是C和C 了 因为我们的操作系统 例如WINDOWS IOS LINUX 和核心应用程序 例如OFFICE IE CHROME 以及绝大多数的游戏 几乎全都是C和C 以及少量
  • 除了中国好声音,星空华文冲刺港股IPO还有其他王牌吗?

    回顾国内的综艺节目发展史 中国好声音 曾是里程碑式的存在 曾一度稳坐各大省级卫视综艺节目收视率的头把交椅 更是民间歌手们心中殿堂级的存在 但它背后的制作公司 星空华文似乎却江河日下 5月13日 星空华文再次发起IPO 这一回选择登陆的是港交
  • JSP中,AJAX使用POST方式提交中文乱码问题解决

    本人原创 欢迎转载 转载请保留本人信息 作者 wallimn 电邮 wallimn sohu com 博客 http blog csdn net wallimn 时间 2006 11 15 本人原创 欢迎转载 转载请保留本人信息 今天终于解