Photo By: viktorhanacek


上一篇文章讲了Go语言的几种URL编码方法,这篇文章我们来讲一讲Go语言的URL解码方法。URL解码是编码的逆操作,可以将URL编码的字符转换成正常的形式

URL解码查询字符串

Go语言内置的net/url 包包含一个内置方法 QueryUnescape (QueryEscape编码方法的对应解码方法)可以解码一个字符串。下面是一个简单的例子

package mainimport ("fmt""net/url"
)func main() {encodedValue := "Hello+%E4%B8%AD%E5%9B%BD"decodedValue, err := url.QueryUnescape(encodeValue)if err := nil {fmt.Println(err)return}fmt.Println(decodedValue)
}

输出

Hello 中国

URL解码多个查询参数

“param1=value&param2=value2”

可以使用url.ParseQuery() 方法将由&分隔的一系列 key=value 键值对解析为map[string] []string

package main
import ("fmt""net/url"
)func main() {queryStr := "name=Rajeev%20Singh&phone=%2B9199999999&phone=%2B628888888888"params, err := url.ParseQuery(queryStr)if err != nil {fmt.Println(err)return}fmt.Println("Query Params: ")for key, value := range params {fmt.Printf(" %v = %v\n", key, value)}
}

输出

Query Params:name = [Rajeev Singh]phone = [+9199999999 +628888888888]

URL解码路径段

PathUnescape() 函数和 QueryUnescape() 相似,只是它不对不会把 + 转换为空格,因为 + 允许出现在URL路径中

package mainimport ("fmt""net/url"
)func main() {path:= "path%20with%3Freserved+characters"unescapedPath, err := url.PathUnescape(path)if err != nil {fmt.Println(err)}fmt.Println(unescapedPath)
}

输出

path with?reserved+characters

解码一个完整的URL

最后,我们来看一个解码完整URL的例子

package mainimport ("fmt""net/url"
)func main() {u, err := url.Parse("https://www.website.com/person?name=Rajeev%20Singh&phone=%2B919999999999&phone=%2B628888888888")if err != nil {fmt.Println(err)return }fmt.Println("Scheme: ", u.Scheme)fmt.Println("Host: ", u.Host)queries := u.Query()fmt.Println("Query Strings: ")for key, value := range queries {fmt.Printf(" %v = %v\n", key, value)}fmt.Println("Path: ", u.Path)
}

输出

Scheme:  https
Host:  www.website.com
Query Strings:phone = [+919999999999 +628888888888]name = [Rajeev Singh]
Path:  /person

Go语言URL解码方案实践相关推荐

  1. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  2. Android视频滤镜添加硬解码方案

    由于工作的需求,研究过了一段时间的Android 的音视频播放渲染以及编辑方面的知识,这里就自己一些浅薄的了解对所了解做一个简单的介绍和记录,如有不对的地方请指正!同时也会记录下硬件解码的情况下完成滤 ...

  3. python网络爬虫实列——站长之家url解码编码

    爬虫实列--站长之家url解码编码 利用urllib可以做一些网页在线翻译,在线解码之类的实列. 1. 这是网站 2.找到所需要的请求头文件 找到请求网址,明确请求方法(详情请百度get请求与post ...

  4. 干货 | 前端智能化探索,骨架屏低代码自动生成方案实践

    作者简介 ZiLin Wang,前端开发者,函数式编程爱好者,最近沉迷于低代码平台和WebAssembly:Ivan Zhang,擅长前端打杂,最近专注于Sketch插件和DesignOps平台:Sh ...

  5. Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)

    精通Unix下C语言编程与项目实践 之动态库的生成 作者:朱云翔,胡平 3.3 动态库的生成 动态库的生成可分为三个步骤,设计库源码.编译位置无关码(PIC)型.o文件和链接动态库.链接动态库的命令包 ...

  6. 《R语言与数据挖掘最佳实践和经典案例》—— 第3章 数 据 探 索

    本节书摘来自华章出版社<R语言与数据挖掘最佳实践和经典案例>一 书中的第3章,第3.1节,作者:(澳)Yanchang Zhao,更多章节内容可以访问云栖社区"华章计算机&quo ...

  7. 快速解码base64和utf-8的ASCII编码和URL解码

    看论坛上总是有人发乱七八糟的文字,根本看不懂,用下面的方法解密一下. 只要有浏览器的开发者工具就行了. UTF-16解码 console.log("\u5475\u5475") U ...

  8. 亿级流量场景下的平滑扩容:TDSQL的水平扩容方案实践

    为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库.云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙<你想了解的国产数据库秘密,都在这!&g ...

  9. 文件锁操作《精通Unix下C语言编程与项目实践》之三

    文章试读 不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八的职场感悟吧.不值钱的软件人才 精力充沛与事业成功 我的诗歌:都是我的打 ...

最新文章

  1. android fragment 弹出对话框,Android DialogFragment弹框实现
  2. Unity 4.x游戏开发技巧集锦第2章摄像机的应用
  3. Linux 线程与进程,以及通信
  4. CentOS 7.6 搭建Gitlab教程
  5. c语言中 字符串常量的界定符,C字符串操作函数
  6. 出现23.97帧率的原因
  7. 字节码技术在模块依赖分析中的应用
  8. 计算机中隐藏的文件找不到了怎么办,隐藏文件夹找不到了怎么办【图解】
  9. 6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!
  10. Java多线程学习三十三:Future 的主要功能是什么?
  11. long 和 Object的相互转换
  12. UVA 254 Towers of Hanoi
  13. Laravel中的日志与上传
  14. Mixly 二次开发 自定义库 OLED
  15. android studio海马玩模拟器
  16. Amazon,我们完全不能接受 — 因此我们必须变更 Elastic 许可协议
  17. 总结一下vue添加收藏取消收藏功能
  18. 占书明:电脑只能上扣扣QQ和微信,无法打开网页,解决办法!
  19. 携程首页手机端-静态页面
  20. 43 备忘录模式(详解版)

热门文章

  1. Servlet-用户登录注册案例
  2. 小型ssh工具dropbear 安装配置及使用详解
  3. 【译】将 Android 项目迁移到 Kotlin 语言
  4. [CSS]CSS3新增属性
  5. 汽车加油问题(贪心)-算法设计与分析
  6. 在tushare上提取沪深300指交易数据
  7. WCDMA femto 微基站射频校准
  8. confluent-ksql 学习
  9. javascript公有静态成员
  10. 花5min就能搞清楚redis和zookeeper分布式锁的区别,太有必要读一下了