地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法,escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。 
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常, 
发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面, 
然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式, 
第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址 
(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。 
总结: 
1、汉字出现在URL路径部分的时候不需要编码解码; 
2、使用encodeURI进行2次编码; 
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;

客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, "UTF-8");

今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。 
页面 
/exportExcel.topinfo?ls="+encodeURI(encodeURI(_tmplsgx))+"&zt="+encodeURI(encodeURI(_tmpzt))s
action中 
 String ls=request.getParameter("ls");
  ls = new String(ls.getBytes("iso-8859-1"),"utf-8");
  ls = java.net.URLDecoder.decode(ls,"UTF-8");

这样乱码就解决了。
 
分享到:

转载于:https://blog.51cto.com/liuya2012/1039512

js编码后提交java解码相关推荐

  1. html url js编码顺序,浏览器的解码顺序(html解码、url解码以及js解码)

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. js编码scape 解码unescape

    str=escape(yourStr) yourStr=unescape(str) 后台默认utf-8 所以 由js跳到后台是不用解密的 前台 <a target='_blank' href=' ...

  3. xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)

    xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...

  4. Js编码和Java后台解码

    注: 在使用get提交,url传递参数的时候,会带来中文乱码的问题,对此可以使用js编码来解决. Js编码的几种方式区别: 1.window.escape()与HttpUtility.UrlEncod ...

  5. js编码java解码_Js编码和Java后台解码

    注: 在使用get提交,url传递参数的时候,会带来中文乱码的问题,对此可以使用js编码来解决. Js编码的几种方式区别: 1.window.escape()与HttpUtility.UrlEncod ...

  6. Python 技术篇 - 使用unicode_escape对js的escape()方法编码后的字符串进行解码实例演示

    这是 javascript 的 escape() 编码后的效果. 这是 python 的解码过程: xpath = '%f%t%u90E8%u95E8%u6210%u7ACB%u65F6%u95F4% ...

  7. java 解码 encodeuri_encodeURIComponent编码后java后台的解码

    解决方法一: JavaScript: window.self.location="searchbytext.action?searchtext="+encodeURICompone ...

  8. js编码java解码_常用的js、java编码解码方法

    前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...

  9. java 解码 encodeuri_js与java encodeURI 进行编码与解码

    //网上一堆废话 内置不用写一堆文件处理真是蛋疼 JS escape()使用转义序列替换某些字符来对字符串进行编码 JavaScript 中国 编码后 JavaScript%u4E2D%u56FD u ...

  10. js 编码、解码与asp.net 编码、解码

    js对URL提供:escape,encodeURI,encodeURIComponent 的编码方法encodeURIComponent:推荐使用,它是将中文.韩文等特殊字符转换成utf-8格式的ur ...

最新文章

  1. 大数据之公开数据的价值
  2. 怎么知道 网站是否直接明文保存密码_忘记账号密码 浏览器记住了 怎么找回密码?...
  3. 小程序swiper(tab)高度自适应
  4. JVM_垃圾收集器与内存分配策略01
  5. C指针原理(38)-C快速入门
  6. python程序设计基础考试题库及答案_智慧职教Python程序设计基础题库及答案
  7. 【dfs】病毒(jzoj 1284)
  8. SVG格式的Icon,用了你就知道有多香
  9. ssh : how to add hostkey to “know_hosts”
  10. C#LeetCode刷题之#374-猜数字大小(Guess Number Higher or Lower)
  11. mysql 语句账号注入_mysql中SQL语句的注入问题
  12. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
  13. 说下自己看源码的一点经验(Python Web 相关)
  14. MATLAB 线性运算之图像相加去噪
  15. struts1:Struts的中央控制器
  16. vue 萤石云视频监控对接
  17. 十分钟快速讲明白K均值聚类算法
  18. Linux消息队列及函数详解(含示例)
  19. 求方程式ax2bxc0的根c语言,2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根
  20. 计算机 在哪看是什么32位,如何查看自己的电脑是32位的还是64位

热门文章

  1. 深度梯度压缩:减小分布式训练的通信带宽
  2. Docker学习之docker常用命令
  3. 100: cf 878C set+并查集+链表
  4. oracle更改用户名的问题
  5. Jmeter插件监控服务器性能
  6. Hadoop中MR程序的几种提交运行模式
  7. dbflow 批量 增删查改
  8. Spring MVC 基于URL的映射规则(注解版)
  9. Fedora23 安装 psycopg2
  10. 运行Myeclipse时,如何删除IVM窗口