网站首页 > 技术文章 正文
简介
如果我们要访问一个网站,需要知道这个网站的地址,网站的地址一般被称为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
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
猜你喜欢
- 2025-03-19 在线文档预览kkFileView部署及使用指南
- 2025-03-19 什么是 URL 编码 (URL Encode)(url编码的作用)
- 2025-03-19 全国首辆氢燃料重型卡车,漳州制造!续航一千公里
- 2025-03-19 惊涛骇浪洪水汹涌 他们又一次挺身而出——记抗洪救灾中的体彩人
- 2025-03-19 群晖无法拉取Docker镜像?最稳定的方法:搭建自己的加速服务!
- 2025-03-19 Springboot之登录模块探索(含Token,验证码,网络安全等知识)
- 2025-03-19 超详细带你从入门开始,开发一个超实用的浏览器插件
- 2025-03-19 速腾小组件,最全教程!速看(21款速腾按钮图标解说)
- 2025-03-19 Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 2025-03-19 文件预览的终级解决方案-kkFileView
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)