URI encode与URL encode对空格的不同处理

2023-05-16

        在各种开放平台、OpenAPI越来越多之时,客户端软件或多或少的在通过HTTP、HTTPS协议与服务器交互。这其中一个常见的情况就是要求对URL进行encode处理,以保证中文、特殊字符的正确传递。不过这个小小的encode也没想象中的那么单纯。

        前几日在Android开发中遇到一例时,URL中的空格符(ASCII码是0x20),在经过java.net.URLEncoder类encode以后,会变成+号,而不是%20,从而造成了server不能正确识别。

        经查,URLEncode有两个方法:

public static String encode (String s,String charsetName)
Encodes s using the Charset named bycharsetName.

 

public static String encode (String s)

Equivalent to encode(s, "UTF-8").

 

        第二个方法已经从Android API 1起就被弃用了,建议使用第一种方法显示的指定字符集为UTF-8,并且该编码是将空格符编码为+,而不是%20。当然,这是符合URL规范的,见RFC-1738。

 

        要想将空格符编码为%20,就要用另一种encode,即android.net.Uri类,该类使用RFC-2396标准。语法如下:

public static String encode (String s)

Encodes characters in the given string as'%'-escaped octets using the UTF-8 scheme. Leaves letters ("A-Z","a-z"), numbers ("0-9"), and unreserved characters("_-!.~'()*") intact. Encodes all other characters.

 

        当进行网络相关的接口实现时,还是要认真了解具体的区别,同时也建议开放平台的文档中能尽量清晰的描述协议约定,以免给开发和调试带来困难。试想,如果不是恰巧发现了这个问题,得经过多少测试才能发现这个bug呢?

        至于URL与URI的区别,参见百度百科吧。

——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——


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

URI encode与URL encode对空格的不同处理 的相关文章

  • swagger多个分组代码展示

    swagger分组示例 span class hljs annotation 64 Configuration span span class hljs annotation 64 EnableWebMvc span span class
  • 51单片机与AVR单片机

    51单片机与AVR单片机 区别于不同 区别于不同 51单片机本身种类繁多 xff0c 各种国产变种 xff0c 增强型51等等 他们都是INTEL的80C51内核 xff0c 经典但是老 51单片机到底是哈弗还是冯诺依曼 xff0c 众说纷
  • 电脑休眠、睡眠、待机的区别

    电脑休眠 xff08 Hibernate xff09 将系统切换到该模式后 xff0c 系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中 xff0c 然后切断对所有设备的供电 这样当恢复的时候 xff0c 系统会从硬盘上将休眠文件的内
  • android的OnClick注解无效情况之一

    例子 当使用了 64 OnClick 注解 xff0c 貌似控件不用设置setOnClickListener this 监听了 xff0c 否则会干扰到这个注解无效 xff0c span class token comment 重置数据 s
  • androidStudio不能run运行,显示Loading devices...

    问题示图 试了n种解决方案 1 Clean project 再Rebuild project 2 点击File然后Invalidate andRestart 重启AndroidStudio并清理缓存 3 重启电脑 或者关机再开机 试了常用的
  • 探索Android中的Parcel机制(上)

    一 xff0e 先从 Serialize 说起 我们都知道 JAVA 中的 Serialize 机制 xff0c 译成串行化 序列化 xff0c 其作用是能将数据对象存入字节流当中 xff0c 在需要时重新生成对象 主要应用是利用外部存储设
  • Android动态获取手机是否是充电状态

    参考谷歌官方文档 https developer android google cn topic performance power 一 获取充电状态 在应用中执行某些操作 如软件云端备份 从服务器端获取最新版本号 从服务器端缓存最新软件安
  • EF_Using(问题)

    xfeff xfeff using 语句中使用的类型必须可隐式转换为 System IDisposable using 语句中使用的类型必须可隐式转换为 System IDisposable 在使用 EF 出现 using 语句中使用的类型
  • 100个不能错过的实用JS自定义函数

    1 原生JavaScript实现字符串长度截取 代码如下 span class token keyword function span span class token function cutstr span span class tok
  • Android.mk 编译报错undefined reference to

    当出现 undefined reference to xxx时 xff0c 对应的lib库已经添加到LOCAL STATIC LIBRARIES里面 xff0c 且 头文件已经已经添加时 xff0c 仍然报 undefined refere
  • yocto QT5 QSqlDatabase: QSQLITE driver not loaded

    yocto中默认编译出来的qt是不带有sql driver xff0c 即缺少插件库libqsqlite so 修改位置 xff1a 1 在xx meta qt5 recipes qt qt5 qtbase git bb中 xff0c 修改
  • systemd 介绍

    转自 xff1a https www linuxidc com Linux 2018 03 151291 htm 从 init 系统说起 Linux 操作系统的启动首先从 BIOS 开始 xff0c 接下来进入 boot loader xf
  • 详细讲解systemctl(附常用指令)

    目录 写在前面 systemd和systemctl systemd的配置文件目录 主要服务功能类型 服务状态 常用指令 切换系统模式 xff08 文本 界面模式等 xff09 systemctl配置文件的设置 写在前面 我发现systemc
  • Linux中systemctl详细理解及常用命令

    一 systemctl理解 Linux 服务管理两种方式service和systemctl systemd是Linux系统最新的初始化系统 init 作用是提高系统的启动速度 xff0c 尽可能启动较少的进程 xff0c 尽可能更多进程并发
  • ARM AArch64 GUN交叉编译工具下载官网

    Arm Developer https developer arm com tools and software open source software developer tools gnu toolchain gnu a downlo
  • GStreamer系列 - 基本介绍

    什么是Gstreamer xff1f Gstreamer是一个支持Windows xff0c Linux xff0c Android xff0c iOS的跨平台的多媒体框架 xff0c 应用程序可以通过管道 xff08 Pipeline x
  • 探索Android中的Parcel机制(下)

    上一篇中我们透过源码看到了 Parcel 背后的机制 xff0c 本质上把它当成一个 Serialize 就可以了 xff0c 只是它是在内存中完成的序列化和反序列化 xff0c 利用的是连续的内存空间 xff0c 因此会更加高效 我们接下
  • Caused by: java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0 (无法载入的.类

    Caused by java lang UnsupportedClassVersionError com iov common crud node TPSAlipayConfig Unsupported major minor versio
  • ubuntu18 buildroot make xconfig make gconfig faile

    make xconfig sudo apt get install qttools5 dev make gconfig sudo apt get install libglade2 dev
  • qt5的configure选项说明

    一 配置选项查看及初步解释 通过下面命令查看都有哪一些编译配置选项 span class token punctuation span span class token operator span configure span class

随机推荐

  • qt build

    QT笔记 嵌入式QT交叉编译与移植 含OpenGL ES2 https blog csdn net weixin 40293570 article details 117731268
  • OpenGL之gult/freeglut/glew/glfw/glad的联系与区别

    转 https blog csdn net libaineu2004 article details 105879521 转 https blog csdn net qq 40565033 article details 107715956
  • linux arm fdisk, 对未使用emmc分区扩容

    yocto编译后的wic镜像 xff0c 在刷机后 xff0c 仍有很大部分emmc未使用 xff0c 下面将未使用的emmc扩展到文件系统挂载分区 root 64 imx8dxmek df h Filesystem Size Used A
  • Shell脚本 EOF使用

    前言 xff1a EOF是End Of File的缩写 xff0c 表示自定义终止符 既然自定义 xff0c 那么EOF就不是固定的 xff0c 可以随意设置别名 xff0c 意思是把内容当作标准输入传给程序 xff0c Linux中按Ct
  • matlab之将视频逐帧保存为图片

    clc clear all close all 将视频逐帧保存为jpg图片 obj 61 VideoReader 39 F mh rgb avi 39 输入视频位置 numFrames 61 obj NumberOfFrames 帧的总数
  • 同步锁

    线程和进程 xff1a 几乎所有的操作系统都支持进程的概念 xff0c 所有运行中的任务通常对应一个进程 xff08 Process xff09 当一个程序 进入内存运行时 xff0c 即变成一个进程 而一个线程中又包含多个进程 多线程的问
  • spring容器和SpringMVC容器的区别

    说起spring容器和SpringMVC容器 xff0c 很多刚接触spring框架的同志都有点懵 xff0c 甚至是一头雾水 xff0c 分不清楚两者的关系和区别 xff0c 包括本人也是 xff0c 因此还在网上找个不少资料 这俩容器呢
  • 解决JavaWeb中文乱码问题

    解决JavaWeb的中文乱码 在日常的Java项目开发中 xff0c 乱码成了程序员必经的一道坎 乱码的缘故很好理解 xff0c 就是编码格式和解码格式不一致 xff0c JVM在编译的时候是由于 Web 容器使用了ISO 8859 1的编
  • 敏捷之伤——燃尽图

    燃尽图 xff08 burn down chart xff09 是在项目完成之前 xff0c 对需要完成的工作的一种可视化表示 燃尽图有一个Y轴 xff08 工作 xff09 和X轴 xff08 时间 xff09 理想情况下 xff0c 该
  • SQL Server查询、限制返回行数

    我们在日常开发中 xff0c 经常涉及到分页查询 特别是和页面进行交互 xff0c 分页查询已是家常便饭 现在很多的jq插件都会有分页的模块 xff0c 可以在页面上将数据更好的呈现给用户 xff0c 使得用户拥有更好的体验 像我们熟悉的有
  • mybatis

    我们在做SSM项目的时候 xff0c mybatis是其中的一部分 xff0c 是最后一步也是最重要的一步 xff0c 因为很多时候我们都是为了对数据库进行改动 前几天我在复习mybatis的时候 xff0c 就把一些可能会踩到的坑都碰到了
  • 浅谈yaml

    YAML 是 YAML Ain t a Markup Language xff08 YAML 不是一种标记语言 xff09 的递归缩写 在开发的这种语言时 xff0c YAML 的意思其实是 xff1a Yet Another Markup
  • 跨域处理(CORS)

    首先 xff0c 来了解什么是跨域 xff1f 出于安全性 xff0c 浏览器限制脚本内 xff08 多数情况指ajax xff09 发起的跨源HTTP请求 这意味着使用这些API的 Web应用程序只能从加载应用程序的同一个域请求HTTP资
  • java 文件上传

    Java的件上传有很多种实现方式 xff0c 原生的java程序使用的都是HttpServletRequest来接收前台的文件数据 xff0c 然后通过file进行转换等等来实现的 本文章是使用springboot来实现文件上传的功能 xf
  • linux系统上安装JDK8

    作者 xff1a ChenZhen 博客地址 xff1a https www chenzhen space 版权 xff1a 本文为博主 ChenZhen 的原创文章 xff0c 本文版权归作者所有 xff0c 转载请附上原文出处链接及本声
  • 源码离线安装mariadb

    源码离线安装mariadb 卸载系统自带mariadb libs 使用下面的命令检查是否安装有MySQL MariaDB rpm qa grep mariadb rpm e mariadb libs 5 5 68 1 el7 x86 64
  • 结束,也是开始。

    三年时光转眼即逝 xff0c 临到毕业才幡然醒悟 xff0c 自己掌握的专业技能太少 xff0c 最后几个月才养成了几个好习惯 在上班利用空闲时间多学学其他的技术 xff0c 希望自己可以不停的努力 xff0c 充实自己的每一天
  • 论 "张筱雨"

    当今网络谁最红 xff1f 当今网络谁最裸 xff1f 当今网络谁征服了大多数男人们的眼球 xff1f 当今网络谁最具创新 xff0c 引领时尚潮流 xff0c 当今网络谁敢和日本AV女优叫板 那么她就是 张筱雨 张筱雨 xff01 xff
  • Linux的多用户登录

    1 Windows只允许在同一时刻只有一个用户登录 xff0c 而Linux允许多用户同时登录 2 在Linux下 xff0c 用户有两种登录模式 一种是 图形界面登录 xff0c 类似于Windows 另一种是 文本登录 xff0c 类似
  • URI encode与URL encode对空格的不同处理

    在各种开放平台 OpenAPI越来越多之时 xff0c 客户端软件或多或少的在通过HTTP HTTPS协议与服务器交互 这其中一个常见的情况就是要求对URL进行encode处理 xff0c 以保证中文 特殊字符的正确传递 不过这个小小的en