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 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
相关文章
- 快手宣布全链路支持iPhone12系列 HDR视频拍摄、编辑、上传和播放
- 谷歌发布 Android 12 Beta 2.1 更新:修复阻止访问锁定屏幕内容等错误
- MariaDB性能优化,我终于搞清楚了!
- 清静了 支付宝严厉整治弹窗 已减少70%
- Excel 执行SQL查询函数
- 微信显示“正在输入”,其实不是在回你消息,背后原因挺“伤人”
- 高考查分开始:23省可直接在支付宝搜“高考”查分查录取
- Qt 宣布 Apple Silicon 支持计划已经完成
- 从这4个特质,看出你是否是个高潜力的设计师!
- 调查显示:用户对苹果 iOS 15 和 iPadOS 15 并不满意
- 电脑发朋友圈了!PC端微信搜一搜也迎来更新
- 按钮不会设计?掌握这 5 个黄金法则就够了
- 爆料称早期手机使用的GPRS加密算法被故意削弱
- 超全面的B端设计指南:树形选择
- 如何打造稳定、好用的 Android LayoutInspector?
- 如何设计「时间显示」更专业?来看大厂总结的方法!
- PyTorch 1.9发布!移动端疯狂更新,网友:我的最爱
- B端设计师的价值在哪里?来看总监级的分析(下)
- B端设计师的价值在哪里?来看总监级的分析(上)
- CentOS下MySQL 8.0安装部署,超详细!