为什么要两次调用encodeURI来解决乱码问题
.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.
假设页面端输入的中文是一个“中”,按照下面步骤进行解码
1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD] 此时已经没有了多字节字符,全部是单字节字符。
2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法
3、再用UTF-8解码一次,就得到"中"了。
想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。
JS:document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;JAVA后台:roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");
原文地址:http://blog.csdn.net/howlaa/article/details/12834595
转载于:https://www.cnblogs.com/coder-lzh/p/8616093.html
为什么要两次调用encodeURI来解决乱码问题相关推荐
- eclipse中文乱码问题解决方案 以及 一种无法解决乱码的情况
常规乱码解决方案: eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse ...
- 【javaScript】encodeURI来解决URL传递时为什么需要进行两次encodeURI编码
encodeURI来解决URL传递时为什么需要进行两次encodeURI编码 文章来源于https://blog.csdn.net/u012027337/article/details/5212647 ...
- ARM开发板上iconv_open(utf-8, gb2312) 调用失败的解决方法(转)
ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法 应用程序代码如下: static int code_convert ...
- PyQt5随笔:Qtdesigner设计转换而来的界面.py文件两种调用方式
PyQt5随笔:Qtdesigner设计转换而来的界面.py文件两种调用方式 文章目录 PyQt5随笔:Qtdesigner设计转换而来的界面.py文件两种调用方式 1.前言 2.方式一:另建 py ...
- Centos 64位使用 yum 会安装两个相同软件包的解决方法
Centos 64位使用 yum 会安装两个相同软件包的解决方法 - 后山一根葱 Centos 64位使用 yum 会安装两个相同软件包的解决方法 [Linux] post by 后山一根葱 / 20 ...
- Android 在Fragment中执行onActivityResult不被调用的简单解决方法
Android 在Fragment中执行onActivityResult不被调用的简单解决方法 参考文章: (1)Android 在Fragment中执行onActivityResult不被调用的简单 ...
- Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理
效果图如下: 前端发送一次请求,后端接收到两次,第二次是:GET /favicon.ico HTTP/1.1 可以看到页签上标题栏前面是个地球,这个是默认的. 原因就是后台给的响应里没有指定这个图标, ...
- 异常“只能在执行Render()的过程中调用RegisterForEventValidation”的解决办法(转)...
当出现下面的异常的时候: 只能在执行Render()的过程中调用RegisterForEventValidation 当出现的异常的提示: 异常详细信息: System.InvalidOperatio ...
- Java经典面试题:一个线程两次调用start()方法会出现什么情况?
大家好,我是 Oracle首席工程师杨晓峰. 今天想和大家深入聊聊线程,相信大家对于线程这个概念都不陌生,它是Java并发的基础元素,理解.操纵.诊断线程是Java工程师的必修课,但是你真的掌握线程了 ...
最新文章
- 从2D到3D的目标检测综述
- 解密回声消除技术之一(理论篇)
- java 常用的api_Java中常用的API(一)——Object
- huffman编码的程序流程图_F28379D之CLB解码多摩川编码器2——LIB版例程讲解(原创)...
- 循序渐进的敏捷-每日例会
- ROS学习笔记一(ROS的catkin工作空间)
- 利用BI进行报表分析(二)--SSAS多维数据集以及维度的建立
- 配置文件中有“路径信息”时,需呀注意的问题(路径中的\是转义字符)~
- 鸿蒙OS比fuchsia的优势,第一天带你走进华为开发者大会,了解鸿蒙OS
- [软件架构]基于PluginRT的插件编程
- 【FastReport教程】如何使用RichObject属性将文件导出为文本格式
- Linux磁盘管理及Lvm
- 2021年危险化学品生产单位安全生产管理人员找解析及危险化学品生产单位安全生产管理人员复审考试
- 实现贪吃蛇程序的整个代码:
- HybridPose:混合表示下的6D对象姿态估计
- syn 攻击脚本 python_Python Scapy实现SYN Flood攻击
- 谷粒学苑 —— 3、后台系统前端项目创建
- Android项目:基于安卓Android校园零食配送系统app(计算机毕业设计)
- 一键体验安全快捷外贸收款服务,PingPong福贸满足你的个性化需求
- JAVA项目之苹果IAP内购JAVA服务器验证流程详解
热门文章
- Cordova build构建常见问题整理
- Spring Boot 2.x整合Apollo代码示例
- 分布式主流配置中心介绍:Apollo/Nacos/Spring Cloud Config/Disconf等
- MySQL索引下推(5.6版本+)
- linux cp和rm命令
- 段式存储管理 Vs 页式存储管理 Vs 段页式存储管理
- 计组第六章——计算机的运算方法重点总结
- java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;)
- Linux C : TCP/IP 和 网络编程
- stm32之iap实现应用(基于串口,上位机,详细源码)