共计 1582 个字符,预计需要花费 4 分钟才能阅读完成。
简介
如果咱们要拜访一个网站,须要晓得这个网站的地址,网站的地址个别被称为 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
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!