Android 中的URLEncoder和URLDecoder

URLEncode原理(全网详解) URL是为了 统一的命名网络中的一个资源(URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用) 阅读详情
URLEncode 简单一句话,URLEncoding 就是为了将网址中的非ASCII码内容,转换成可以传输字符

在编码的时候,保留所有英文字母,数字,以及特定的字符,(这些字符全部都是ASCII中的),除此之外将会转换为十六进制标识,并且在每一个十六进制之前加上%,内容中的' '空格,全部采用加号+替换

URLEncoding 的格式,将要转换的内容,用十六进制表示法转换出来,然后每一个字节表示之前,用%开头;例如0x9c字节经过URLEncoding 就变成了%9C


编码的时候使用URLEncoder,解码的时候使用URLDecoder

编码  String encode = URLEncoder.encode("千雅爸爸", "UTF-8");//第二个参数一定要是服务器段支持的格式
解码  String decoderString = URLDecoder.decode("%E5%8D%83%E9%9B%85%E7%88%B8%E7%88%B8","UTF-8");

package tech.androidstudio.encodecryp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        urlEncodingTest();
    }

    /**
     *URLEncode 简单一句话,URLEncoding 就是为了将网址中的非ASCII码内容,转换成可以传输字符

     在编码的时候,保留所有英文字母,数字,以及特定的字符,(这些字符全部都是ASCII中的),除此之外将会转换为十六进制标识,并且在每一个十六进制之前加上%
     内容中的' '空格,全部采用加号+替换
     URLEncoding 的格式,将要转换的内容,用十六进制表示法转换出来,然后每一个字节表示之前,用%开头;例如0x9c字节经过URLEncoding 就变成了%9C

     应用场景:所有GET请求,网址用到中文的情况,以及POST请求中,所有的Key 和Value,在提交之前,必须要经过URLEncoding

     */
    public void urlEncodingTest(){
        try {
            //URLEncoder的编码
            String encode = URLEncoder.encode("千雅爸爸", "UTF-8");//第二个参数一定要是服务器段支持的格式
            Log.d("kodulf","千雅爸爸 的URLEncoding 是"+encode);

            //URLDecoder的解码:
            String decoderString = URLDecoder.decode("%E5%8D%83%E9%9B%85%E7%88%B8%E7%88%B8","UTF-8");
            Log.d("kodulf","%E5%8D%83%E9%9B%85%E7%88%B8%E7%88%B8 URLDecoder的解码为:"+decoderString);


        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

    }
}

03-22 06:18:27.934 366-366/? D/kodulf: 千雅爸爸 的URLEncoding 是%E5%8D%83%E9%9B%85%E7%88%B8%E7%88%B8
03-22 06:18:27.945 366-366/? D/kodulf: %E5%8D%83%E9%9B%85%E7%88%B8%E7%88%B8 的解码为:千雅爸爸



应用场景:所有GET请求,网址用到中文的情况,以及POST请求中,所有的Key 和Value,在提交之前,必须要经过URLEncoding
package tech.androidstudio.readfileshttpurlconnection;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements Runnable {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//        Thread thread = new Thread(this);
//        thread.start();

        URL url = null;
        try {
            //定义存储要提交的数据的Map
            //如果 仅仅是为了测试那么直接使用
            //测试的请求+++++++++++++开始+++++++++++++++
            //StringBuilder sb = new StringBuilder("username=哈哈&password=psw");
            //测试的请求++++++++++++++结束++++++++++++++

            //如果为了模拟真实的请求,那么就使用下面的
            //模拟真实的请求+++++++++++++开始+++++++++++++++
            HashMap<String,String> params = new HashMap<String,String>();
            params.put("username", "哈哈");
            params.put("password", "psw");
            //把要提交的 数据类型定义为 username=哈哈&password=psw的格式
            StringBuilder sb = new StringBuilder();
            //通过Map的遍历的到
            for(Map.Entry<String,String> en:params.entrySet()){
                    sb.append(en.getKey())
                            .append("=")
                            .append(URLEncoder.encode(en.getValue(), "utf-8"))
                            .append("&");
            }
            //删除最后一个&,注意 这里是 length-1,因为是从0开始计数的。
            sb.deleteCharAt(sb.length()-1);
            //模拟真实的请求++++++++++++++结束++++++++++++++

            url = new URL("http://192.168.1.106:8080/ServerDemo/servlet/LoginServlert");
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

            urlConnection.setRequestMethod("POST");
            urlConnection.setConnectTimeout(5000);
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);//设置可以向服务器传递数据

            //设置提交的内容的类型
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            //设置提交的内容的长度
            byte[] data = sb.toString().getBytes("utf-8");//注意这里的编码utf-8
            urlConnection.setRequestProperty("Content-Length", String.valueOf(data.length));

            //提交数据
            OutputStream outputStream = urlConnection.getOutputStream();
            outputStream.write(data);
            outputStream.close();


            //判断服务器端的响应码是不是200
            InputStream in = urlConnection.getInputStream();
            if(urlConnection.getResponseCode()==200){
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] arr = new byte[1024];
                int len=0;
                while((len=in.read(arr))!=-1){
                    bos.write(arr,0,len);
                }

                byte[] b = bos.toByteArray();
                String ss = new String(b,"utf-8");
                Log.d("kodulf","kodulf"+ss);

            }
            //关闭流
            in.close();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void run() {
        try {
            //配置 HttpURLConnection

            //TODO 这里的ip 地址一定不能使localhost 一定要是电脑的或者是正式ip地址.
            //如果写成了localhost,那么就会报错java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused
            //URL url = new URL("http://localhost:8080/tomcat.png");
            URL url = new URL("http://192.168.1.106:8080/tomcat.png");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setConnectTimeout(5000);
            //Sets the flag indicating whether this URLConnection allows input. It cannot be set after the connection is established.
            httpURLConnection.setDoInput(true);

            //获取返回的文件
            InputStream in = null;
            FileOutputStream fos = null;
            if (httpURLConnection.getResponseCode() == 200) {
                in = httpURLConnection.getInputStream();
                //一定不能直接在FileOutputStream里面写文件名,需要添加路径
                //错误的写法:fos = new FileOutputStream("a.bmp");
                //下面存储到内部存储的私有的cache目录里面,注意了生成的文件名是cachea.bmp
                fos = new FileOutputStream(getCacheDir().getPath()+"a.bmp");
                byte[] arr = new byte[1024];
                int len = 0;
                //每次读取 1024个字节,如果读取返回为-1说明到了文件的末尾,结束读取
                while ((len = in.read(arr)) != -1) {
                    fos.write(arr, 0, len);
                }
                //一定要记住要关闭读取流。
                in.close();
                fos.close();
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


Java的URL编码和解码(适用于Android开发) 本文介绍了在Java中进行URL编码和解码的方法,并提供了相应的源代码示例。通过URL编码和解码,我们可以处理URL中的特殊字符,确保传输的数据格式正确。在Android开发中,URL编码和解码是常见的操作,特别是在与网络通信相关的场景中。URL编码和解码是在网络编程中常见的操作,用于处理URL中的特殊字符。在Android开发中,我们经常需要对URL进行编码和解码,以确保传输的数据是正确格式化的。URL编码是将URL中的特殊字符转换为特定格式的过程,以便于在网络传输中使用。在上面的示例中,我们使用。 阅读详情

相关推荐

Android AES、MD5、Base64、URLEncode加密

Android AES、MD5、Base64、URLEncode加密 org.apache.commons.codec.binary.Base64; 代替sun.misc.BASE64Encoder sun.misc.BASE64Encoder

Android urlEncode

一、需求背景 如果我们在url后面拼接参数的时候需要先urlEncode。 二、代码实现 1、Encoded public static String urlEncoded(String paramString) { if (paramString == null || paramString.equals("")) { return ""; } try { String str = new String(paramString.getBytes(), "UTF-8"); str = UR

分享Android开发知识 2136

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3533

url编码之urldecode,urlencode/python自带的http服务/cookie,session,token

Cookie是key-value结构,类似于一个python中的字典。随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie,不能跨域)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!

General_zy的博客 7066

川崎机器人 AS语言基础运动指令表

    功能简介 动作方式 参考坐标系 位置特性 X,Y,Z 角度特性 O,A,T 指令格式(距离单位毫米,时间单位秒,角度单位度 示例1 示例2 运 动 指 令 JMOVE 以关节移动到目标点 关节移动方式 基础坐标系 不受控 伪随机动作 JMOVE 目标点 JMOVE #yd JMOVE put1 LMOVE 以直线移动到目标点 直线移动方式

喜欢自学并分享经验的技术宅 9352

WRF实战:自定义Vtable解析ECMWF海温数据的关键步骤与技巧

本文详细介绍了在WRF模型中自定义Vtable以解析ECMWF海温数据的关键步骤与技巧。通过解剖GRIB文件、编写自定义Vtable条目以及配置METGRID.TBL,解决了ECMWF数据与WRF模型对接的难题,为海洋气象和台风模拟研究提供了高精度数据输入方案。

weixin_29279101的博客 336

Android URLEncoder和URLDecoder

一、为什么需要urlEncode URLEncode 简单一句话,URLEncoding 就是为了将网址中的非ASCII码内容,转换成可以传输字符 在编码的时候,保留所有英文字母,数字,以及特定的字符,(这些字符全部都是ASCII中的),除此之外将会转换为十六进制标识,并且在每一个十六进制之前加上%,内容中的’ '空格,全部采用加号+替换 URLEncoding 的格式,将要转换的内容,用十六进制表示法转换出来,然后每一个字节表示之前,用%开头;例如0x9c字节经过URLEncoding 就变成了%9C 二

分享Android开发知识 1070

Matlab使用GitHub的踩坑记录(持续更新)

Matlab使用git的踩坑记录前言Matlab设置Git的官方帮助文档系统配置新建Git两种代码管理方式典型源代码管理SVN分布式源代码管理 Git注意:SVN和Git都可以用GitHub创建新的库 前言 作为Git初学者,对Git的代码版本管理非常非常喜欢,给了我极大的安全感。特别是想到之前的几次Matlab、Latex和python的代码莫名其妙被折腾没了又没法找回的悲剧,决定慢慢的走入gi...

voluntry的博客 7297

Android studio urlencode(url编码)URLDecoder、URLEncoder

String text1= java.net.URLEncoder.encode("中国", "utf-8"); //text1: %E4%B8%AD%E5%9B%BD Stringtext2 = java.net.URLDecoder.decode(text1, "utf-8"); //tex2: 中国 ...

简公子的博客 2762

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2286

SAP FICO 内部往来对账功能开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO 内部往来对账功能开发说明书(包括开发源代码、测试样例、FS)

我好像病了的博客 1224

Android 中URLEncoder编码器和URLDecoder解码器的使用!

一、【说明:为什么要进行URLEncoder编码?】通常我们客服端在进行网络请求的时候,网址中会出现非ASCll码中的字段,比如说常有的中文、?、&amp;等特殊字符,如果将这些字符直接向前到网址中访问是会出现错误的,那么这样就要借助URLEncoder对特殊字符进行编码操作了,它可以将特殊字符转换为可以正常传输的字符。*附加一张ASCll码表供参考:二、编码规则在编码的时候,保留所有英文字母,数...

奋斗的老年人 9386

RK3588平台开发系列讲解(项目篇)常见模型结构

📢 AI 模型常采用人工神经网络来模拟人脑神经的记忆和处理信号的能力。常见的人工神经网络类型有深度神经网络(Deep Neural Network,DNN)、卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)等。

内核笔记 1758

android 地址转译,Android URLEncoder 转译中文

释放双眼,带上耳机,听听看~!今天做了 关键词搜索,需要将关键词汉字 作为参数 通过接口一起传给后台,当时没有对汉字进行特殊字符处理 让我痛苦了好一会,后来打印了一下连接 发现 有汉字 哈哈这样的话 必须对汉字进行一下转译,这样后台才能是别的你的请求。注意 只需要对参数值进行转译 不要整个串进行转译否则 参数也会被转译 自找麻烦没什么技术 直接上代码 给出 转译 烦转译 的方法try {//将汉字...

weixin_34502341的博客 476

198、影像系统设计评审流程:从需求评审到 EVT、DVT、PVT 各阶段的关注重点

本文详细介绍了影像系统从需求评审到EVT、DVT、PVT各阶段的设计评审流程及关键点。作者通过实际案例(如IMX766模组偏紫问题)强调硬件工艺的重要性,指出影像系统是功能定义与物理实现的反复拉锯过程。文章分阶段解析:需求评审需将模糊需求转化为物理参数;架构评审要明确接口定义和时序约束;EVT阶段重点关注模组一致性和基础链路;DVT阶段需平衡算法调优与硬件验证;PVT阶段则以量产一致性为核心。最后提出建立"边界条件确认表"和"健康度看板"等实用建议,强调工程师需具备从表象追溯硬件根源的物理直觉。全文贯穿实战

sundong_81的博客 218

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 客户端发服务器发送中文请求,服务端是乱码的解决方法

PC端向服务器发送中文是正常的,而用android 客户端向服务端发送中文就是不行。我在WEB.XML中已经加了UTF-8的字符转换还是不行 下面的方法可以解决(红色) 在客户端把中文字符用URLEncoder.encode()进行转码,在服务器端用URLDecoder.decode()进行解码,这样就能正常的提取中文字符了 private boolean sendDataToSer

阿城的专栏 5228

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android前端与后端服务器URL地址栏传输中文字符出现乱码问题

Android端:要对字符进行编码 String string = "传输的字符"; String eStr = URLEncoder.encode(string, "utf-8"); 服务器端:通过对获得数据进行解码 String decodeString = URLDecoder.decode(eStr, "utf-8"));

zcf396720的专栏 1020

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android 数据请求穿中文乱码解决方法

数据请求传递中文时乱码: Android 在提交数据包含中文,传到后台时变成乱码: 解决方案: 在客户端转码: URLEncoder.encode(s,"utf-8"); 在服务端解码: URLDecoder.decode(s, "utf-8"); 测试: public class Test { public static void main(String[] args){ String str = "李四"; String str1 = "%E5%BC%A0%E4%B8%89";

gdvfs12的博客 3234

Android 中文字符转UTF-8编码

[java] view plaincopy import java.io.UnsupportedEncodingException;   import java.net.URLDecoder;   import java.net.URLEncoder;         public class Test {       public static void

Sunnylucy1的专栏 4662

【错误笔记——编码问题】安卓从服务器获取数据乱码

自己写了个安卓软件,自己建立的http服务器,但是数据传输到Android的时候乱码,数据是用Json封装的。 现在用以下的方法得以解决: 数据发送的时候先用 URLEncoder.encode() 编译一下 接受的数据再用 URLDecoder.decode() 进行解码 转载于:https://www.cnblogs.com/kirno/p/3724563.html...

weixin_30408165的博客 74

emoji表情转码

iOS 编码 [@"带表情的字符串" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]]; URLFragmentAllowedCharacterSet "#%<>[\]^`{|} URLHostAllowedCharacterSet "#%/<>?@\^`{|} URLPasswordAllowedCharacterSet "

会装系统的程序员 554

android客户端向服务器发送请求中文乱码的问

android客户端向服务器发送请求的时候,并将参数保存到数据库时遇到了中文乱码的问题: 解决方法: url = "http://xxxx.com/Orders/saveorder.html?ordersNum="+ ordersNum + "&payServer="+ URLEncoder.encode(payServer, "UTF-8") + "&amp...

weixin_30773135的博客 131

Android 使用JSON格式与服务器交互 中文乱码问题解决

当前是在开发Android 程序时,客户端与服务器端采用JSON传送数据,发现中文乱码问题。不过这个问题的解决办法应该对所有java语言开发的项目都使用。 解决方法是: 1.客户端发送数据之间加上: URLEncoder.encode("要传送的数据", "utf-8"); 对要发送的数据进行字符集设置。 2.服务器端接收数据时加上: URLDecoder.decode("...

weixin_34082789的博客 296

Android发送汉字到服务器端为乱码解决办法

在Android端发送汉字到服务器端后,解析出来汉字总是乱码,经过查找各方大神资料,终于解决,方法如下: Android端:     发送汉字数据之前调用URLEncoder.encode(String s , String encoding);方法对原始数据按照“UTF-8”或者其他编码格式进行编码; 服务器端: 在接受到的数据流后,对数据流进行解析,对解析得到的字符串调用URLDeco

hjwxy147258的专栏 751

java---网络请求

这里主要用HttpUrlConnection这个类 网络的连接: String spec=”xxx.xxx.xxx”; URL url=new URL(spec); 打开连接; HttpUrlConnection connection=(HttpUrlConnection)url.openConnection; 设置请求方式 connection.setRequestMethod(“

aline1995的专栏 607
上一篇: Android 中Base64编码解码
下一篇: RSA 解密的时候报错 而且有乱码:java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值