浅谈URLEncoder编码算法

一、为什么要用URLEncoder

客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文。

而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址,

将网址中的非ASCII码内容转换成可以传输的字符

不会被编码的内容

1.大写字母A-Z

2.小写字母a-z

3.数字 0-9

4.标点符 - _ . ! ~ * ‘ (和 ,)

二、编码原理

1、将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头

eg:  0x9c  URLEncoder --> %9c

2、内容中的空格‘ ’ ,全部用+代替

3、注:与Hex不同,Hex是将所有的字符转换为16进制表示,而URLEncoder是将ASCII码集之外的转换为%加上相应的16进制,而ASCII码集内的字符不进行处理

三、应用场景

1、所有的GET请求

2、网址中有中文等情况

3、POST请求,所有的Key和Value在提交之前都要经过URLEncoder

四、示例

try {    String a = URLEncoder.encode("a", "UTF-8");    Log.i("encode","a 进行URLEncoder编码后-->"+a );    String b = URLEncoder.encode("a中", "UTF-8");    Log.i("encode","a中 进行URLEncoder编码后-->"+b );

    String decode = nURLDecoder.decode("a%E4%B8%AD", "UTF-8");    Log.i("encode","a%E4%B8%AD 进行URLDecoder解码后-->"+decode);} catch (UnsupportedEncodingException e) {    e.printStackTrace();}

运行结果:

10-17 07:33:14.357 1012-1012/com.xqx.encrypsthow I/encode﹕ a 进行URLEncoder编码后-->a
10-17 07:33:14.367 1012-1012/com.xqx.encrypsthow I/encode﹕ a中 进行URLEncoder编码后-->a%E4%B8%AD
10-17 07:33:14.377 1012-1012/com.xqx.encrypsthow I/encode﹕ a%E4%B8%AD 进行URLDecoder解码后-->a中

可以看出 字符‘a‘ 并没有编码  而 中文 ‘中‘ 进行了编码

与URLEncoder编码对应的是URLDecoder解码

可以看出 "a中"--编码-->"a%E4%B8%AD"--解码-->"a中"

时间: 2024-08-04 18:20:49

浅谈URLEncoder编码算法的相关文章

浅谈Hex编码算法

一.什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示. 二.作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节 三.应用场景 在XML,JSON等文本中包含不可见数据(二进制数据)时使用 四.使用 1.将字节数组转换为字符串 1 /** 2 * 将字节数组转换为字符串 3 * 一个字节会形成两个字符,最终长度是原始数据的2倍 4 * @param data 5 *

转:浅谈洗牌算法(面试题)

很多人都有耳闻过洗牌算法,时常会在面试中碰到,我们下面来定义一下这个问题. 所谓洗牌算法,就是给你一个1到n的序列,让你随机打乱,保证每个数出现在任意一个位置的概率相同,也就是说在n!个的排列中,每一个排列出现的概率相同. 最朴素的做法 对于这个问题我们从最朴素的解法谈起.每次随机选出一个没有被选过的数放到一个队列中,如果随机出来的数已经被选过,那么继续随机直到遇到一个没有被选过的数放入到队列中:重复这样子操作直到所有的数都被选择出来. 我们看看这样子作为什么是对的.首先选第一个数的时候有n个数

浅谈Base64编码

我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Email,查看其原始信息(您可以通过收取.导出该邮件用文本编辑器查看).你会看到类似这样的一个效果: Date: Thu, 25 Dec 2003 06:33:07 +0800 From: "eSX?!" <[email protected]'>[email protected]'>[email p

数据结构杂谈(一)浅谈基本排序算法

0.基本概念 记录:待排序的项目 关键词:决定排序结果 稳定性:相同关键词的记录保持原来的相对次序 1.1插入排序(Insertion Sort) 算法思想 一种简单直观的排序算法,工作原理是通过构建有序序列:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法描述 具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排序的元素小于或者等于

浅谈关于特征选择算法与Relief的实现

一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1.     特征个数越多,分析特征.训练模型所需的时间就越长,模型也会越复杂. 2.     特征个数越多,容易引起“维度灾难”,其推广能力会下降. 3.     特征个数越多,容易导致机器学习中经常出现的特征稀疏的问题,导致模型效果下降. 4.     对于模型来说,可能会导致不适定的情况,即是解出的参数会因为样本的微小变化而出现大的波动. 特征选择,能

浅谈字符编码

前言 我们知道,.NET Framework 在内部将文本(string)存储为 Unicode UTF-16.在 .NET Framework Base Class Library 中,System.Text.Encoding 类及其派生类提供了对字符编码的支持.Encoding 类的静态GetEncodings 方法返回包含所有编码的数组. 源程序代码 让我们写个 C# 程序来查看一下 BCL 所支持的所有字符编码吧.下面就是 EncodingTester.cs: 01: using Sys

浅谈java编码类型

最近在学习IO技术的时候总是出现乱码问题,最后请教大神才知道是文件编码的不同才导致的乱码.为了避免下次出现乱码,这里对编码问题做个总结,因为本人初学,难免会有遗漏或错误,欢迎各路大虾指正. 首先来看下什么是编码 我们知道计算机在表示我们人类语言的时候用的是字节——也就是二进制,但由于人类的语言太多,无法用byte来表示,所以就需要把人类语言拆分转化为二进制,这就出现了编码.这就好比我们要将汉语转化为英语,翻译的过程就是编码.编码常见的有常见的有 ASCII.ISO-8859-1.GB2312.G

浅谈数据结构-Boyer-Moore算法

上文讲解了KMP算法,这种算法在字符串匹配中应用比较少,在各种文本编辑器中的查找功能大多采用Boyer-Moore算法.1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法. 算法讲解 开始:假定字符串为"HERE IS A SIMPLE EXAMPLE",搜索词为"EXAMPLE". 1.首先,"字符串"与"搜索词"头部对齐,从尾部开始比较.如果尾部字符不匹配,那么

浅谈对机器学习算法的一些认识(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)

一.决策树 定下一个最初的质点,从该点出发.分叉.(由于最初质点有可能落在边界值上,此时有可能会出现过拟合的问题. 二.SVM  svm是除深度学习在深度学习出现之前最好的分类算法了.它的特征如下: (1)它既可应用于线性(回归问题)分类,也可应用于非线性分类; (2)通过调节核函数参数的设置,可将数据集映射到多维平面上,对其细粒度化,从而使它的特征从二维变成多维,将在二维上线性不可分的问题转化为在多维上线性可  分的问题,最后再寻找一个最优切割平面(相当于在决策数基础上再寻找一个最优解),因此