简介

如果咱们要拜访一个网站,须要晓得这个网站的地址,网站的地址个别被称为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

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

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