写点什么

URL URI 傻傻分不清楚,dart 告诉你该怎么用

作者:程序那些事
  • 2021 年 11 月 28 日
  • 本文字数:1101 字

    阅读完需:约 4 分钟

URL URI傻傻分不清楚,dart告诉你该怎么用

简介

如果我们要访问一个网站,需要知道这个网站的地址,网站的地址一般被称为 URL,他的全称是 Uniform Resource Locator。那么什么是 URI 呢?

URI 的全程是 Uniform Resource Identifier,也叫做统一资源标志符。

URI 用来对资源进行标记,而 URL 是对网络上的资源进行标记,所以 URL 是 URI 的子集。

了解了 URI 和 URL 之间的关系之后,我们来看看 dart 语言对 URI 的支持。

dart 中的 URI

dart 中为 URI 创建了一个专门的类叫做 Uri:

abstract class Uri 
复制代码

Uri 是一个抽象类,他定义了一些对 URI 的基本操作。它有三个实现类,分别是_Uri,_DataUri 和_SimpleUri。

接下来,我们一起来看看,dart 中的 Uri 都可以做什么吧。

encode 和 decode

为什么要对 encode URI?

一般来说 URI 中可以包含一些特殊字符,像是空格或者中文等等。这些字符在传输中可能不被对方所认识。所以我们需要对 Uri 进行编码。

但是对于 URI 中的一些特殊但是有意义的字符,比如: /, :, &, #, 这些是不用被转义的。

所以我们需要一种能够统一编码和解码的方法。

在 dart 中,这种方法叫做 encodeFull() 和 decodeFull():

var uri = 'http://www.flydean.com/doc?title=dart uri';
var encoded = Uri.encodeFull(uri);assert(encoded == 'http://www.flydean.com/doc?title=dart%20uri');
var decoded = Uri.decodeFull(encoded);assert(uri == decoded);
复制代码

如果要编码所有的字符,包括那些有意义的字符:/, :, &, #, 那么可以使用 encodeComponent() 和 decodeComponent():

var uri = 'http://www.flydean.com/doc?title=dart uri';
var encoded = Uri.encodeComponent(uri);assert(encoded == 'http%3A%2F%2www.flydean.com%2Fdoc%3Ftitle%3Ddart%20uri');
var decoded = Uri.decodeComponent(encoded);assert(uri == decoded);
复制代码

解析 URI

URI 是由 scheme,host,path,fragment 这些部分组成的。我们可以通过 Uri 中的这些属性来对 Uri 进行分解:

var uri =    Uri.parse('http://www.flydean.com/doc#dart');
assert(uri.scheme == 'http');assert(uri.host == 'www.flydean.com');assert(uri.path == '/doc');assert(uri.fragment == 'dart');assert(uri.origin == 'http://www.flydean.com');
复制代码

那么怎么构造 Uri 呢?我们可以使用 Uri 的构造函数:

var uri = Uri(    scheme: 'http',    host: 'www.flydean.com',    path: '/doc',    fragment: 'dart');assert(    uri.toString() == 'http://www.flydean.com/doc#dart');
复制代码

总结

dart 为我们提供了非常简单的 Uri 的使用工具。

本文已收录于 www.flydean.com

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 3 小时前阅读数: 7
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
URL URI傻傻分不清楚,dart告诉你该怎么用