发布网友 发布时间:2024-09-25 23:23
共1个回答
热心网友 时间:2024-10-20 18:42
简介如果我们要访问一个网站,需要知道这个网站的地址,网站的地址一般被称为URL,他的全称是Uniform Resource Locator。那么什么是URI呢?
URI的全程是Uniform Resource Identifier,也叫做统一资源标志符。
URI用来对资源进行标记,而URL是对网络上的资源进行标记,所以URL是URI的子集。
了解了URI和URL之间的关系之后,我们来看看Dart语言对URI的支持。
dart中的URIdart中为URI创建了一个专门的类叫做Uri:
abstractclassUriUri是一个抽象类,他定义了一些对URI的基本操作。它有三个实现类,分别是_Uri,_DataUri和_SimpleUri。
接下来,我们一起来看看,dart中的Uri都可以做什么吧。
encode和decode为什么要对encode URI?
一般来说URI中可以包含一些特殊字符,像是空格或者中文等等。这些字符在传输中可能不被对方所认识。所以我们需要对Uri进行编码。
但是对于URI中的一些特殊但是有意义的字符,比如: /, :, &, #, 这些是不用被转义的。
所以我们需要一种能够统一编码和解码的方法。
在dart中,这种方法叫做encodeFull() 和 decodeFull():
varuri='http://www.flydean.com/doc?title=darturi';varencoded=Uri.encodeFull(uri);assert(encoded=='http://www.flydean.com/doc?title=dart%20uri');vardecoded=Uri.decodeFull(encoded);assert(uri==decoded);如果要编码所有的字符,包括那些有意义的字符:/, :, &, #, 那么可以使用encodeComponent() 和 decodeComponent():
varuri='http://www.flydean.com/doc?title=darturi';varencoded=Uri.encodeComponent(uri);assert(encoded=='http%3A%2F%2www.flydean.com%2Fdoc%3Ftitle%3Ddart%20uri');vardecoded=Uri.decodeComponent(encoded);assert(uri==decoded);解析URIURI是由scheme,host,path,fragment这些部分组成的。我们可以通过Uri中的这些属性来对Uri进行分解:
varuri=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的构造函数:
varuri=Uri(scheme:'http',host:'www.flydean.com',path:'/doc',fragment:'dart');assert(uri.toString()=='http://www.flydean.com/doc#dart');总结dart为我们提供了非常简单的Uri的使用工具。
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!