📜  Dart – URI

📅  最后修改于: 2021-09-02 05:17:56             🧑  作者: Mango

Uri 类支持对用于 URI(您可能称为 URL)的字符串进行编码和解码的函数。这些函数控制 URI 唯一的字符,例如 & 和 =。此类还解析和公开 URI 的组件 — 主机、端口、方案等。

编码和解码完全限定的 URI

encodeFull()decodeFull()方法用于编码和解码除 URI 中具有特殊含义的字符(例如 /、:、&、#)之外的字符。

例子:

Dart
void main(){
    
var uri = 'https://example.org/api?foo=some message';
  
var encoded = Uri.encodeFull(uri);
assert(encoded ==
    'https://example.org/api?foo=some%20message');
  
var decoded = Uri.decodeFull(encoded);
print(uri == decoded);
}


Dart
void main(){
    
var uri = 'https://example.org/api?foo=some message';
  
var encoded = Uri.encodeComponent(uri);
assert(encoded ==
    'https%3A%2F%2Fexample.org%2Fapi%3Ffoo%3Dsome%20message');
  
var decoded = Uri.decodeComponent(encoded);
print(uri == decoded);
}


Dart
void main(){
    
var uri =
    Uri.parse('https://example.org:8080/foo/bar#frag');
  
assert(uri.scheme == 'https');
assert(uri.host == 'example.org');
assert(uri.path == '/foo/bar');
assert(uri.fragment == 'frag');
print(uri.origin == 'https://example.org:8080');
}


Dart
void main(){
    
var uri = Uri(
    scheme: 'https',
    host: 'example.org',
    path: '/foo/bar',
    fragment: 'frag');
print(
    uri.toString() == 'https://example.org/foo/bar#frag');
}


输出:

true

编码和解码 URI 组件

要编码和解码在 URI 中具有特殊含义的所有字符串字符,包括(但不限于)/、& 和 :,请使用encodeComponent()decodeComponent()方法。

例子:

Dart

void main(){
    
var uri = 'https://example.org/api?foo=some message';
  
var encoded = Uri.encodeComponent(uri);
assert(encoded ==
    'https%3A%2F%2Fexample.org%2Fapi%3Ffoo%3Dsome%20message');
  
var decoded = Uri.decodeComponent(encoded);
print(uri == decoded);
}

输出:

true

解析 URI

如果您有 URI 对象或 URI字符串,则可以使用 URI 字段(如路径)获取其部分。要从字符串创建 URI,请使用parse() 静态方法。

例子:

Dart

void main(){
    
var uri =
    Uri.parse('https://example.org:8080/foo/bar#frag');
  
assert(uri.scheme == 'https');
assert(uri.host == 'example.org');
assert(uri.path == '/foo/bar');
assert(uri.fragment == 'frag');
print(uri.origin == 'https://example.org:8080');
}

输出:

true

构建 URI

您可以使用 Uri() 构造函数从各个部分构建 URI

例子:

Dart

void main(){
    
var uri = Uri(
    scheme: 'https',
    host: 'example.org',
    path: '/foo/bar',
    fragment: 'frag');
print(
    uri.toString() == 'https://example.org/foo/bar#frag');
}

输出:

true