简介 如果我们要访问一个网站,需要知道这个网站的地址,网站的地址一般被称为URL,他的全称是UniformResourceLocator。那么什么是URI呢? URI的全程是UniformResourceIdentifier,也叫做统一资源标志符。 URI用来对资源进行标记,而URL是对网络上的资源进行标记,所以URL是URI的子集。 了解了URI和URL之间的关系之后,我们来看看dart语言对URI的支持。dart中的URI dart中为URI创建了一个专门的类叫做Uri:abstractclassUri Uri是一个抽象类,他定义了一些对URI的基本操作。它有三个实现类,分别是Uri,DataUri和SimpleUri。 接下来,我们一起来看看,dart中的Uri都可以做什么吧。encode和decode 为什么要对encodeURI? 一般来说URI中可以包含一些特殊字符,像是空格或者中文等等。这些字符在传输中可能不被对方所认识。所以我们需要对Uri进行编码。 但是对于URI中的一些特殊但是有意义的字符,比如:,:,,,这些是不用被转义的。 所以我们需要一种能够统一编码和解码的方法。 在dart中,这种方法叫做encodeFull()和decodeFull():varurihttp:www。flydean。comdoc?titledarturi;varencodedUri。encodeFull(uri);assert(encodedhttp:www。flydean。comdoc?titledart20uri);vardecodedUri。decodeFull(encoded);assert(uridecoded); 如果要编码所有的字符,包括那些有意义的字符:,:,,,那么可以使用encodeComponent()和decodeComponent():varurihttp:www。flydean。comdoc?titledarturi;varencodedUri。encodeComponent(uri);assert(encodedhttp3A2F2www。flydean。com2Fdoc3Ftitle3Ddart20uri);vardecodedUri。decodeComponent(encoded);assert(uridecoded);解析URI URI是由scheme,host,path,fragment这些部分组成的。我们可以通过Uri中的这些属性来对Uri进行分解:varuriUri。parse(http:www。flydean。comdocdart);assert(uri。schemehttp);assert(uri。hostwww。flydean。com);assert(uri。pathdoc);assert(uri。fragmentdart);assert(uri。originhttp:www。flydean。com); 那么怎么构造Uri呢?我们可以使用Uri的构造函数:varuriUri(scheme:http,host:www。flydean。com,path:doc,fragment:dart);assert(uri。toString()http:www。flydean。comdocdart);总结 dart为我们提供了非常简单的Uri的使用工具。本文已收录于www。flydean。com 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现! 欢迎关注我的公众号:程序那些事,懂技术,更懂你!