parse静态方法

UriData parse(
  1. String uri
)

将字符串解析为data URI。

字符串必须符合以下格式

'data:' (type '/' subtype)? (';' attribute '=' value)* (';base64')? ',' data

其中typesubtypeattributevalue根据RFC-2045指定,而data是URI字符序列(RFC-2396中的uric)。

这意味着所有字符都必须是ASCII字符,但URI可能包含用于解释并转换为对应字符串的非ASCII字节的百分号转义。

解析会检查Base64编码的数据是否有效,并将其规范化以使用默认的Base64字母表和填充。非Base64数据会使用百分号转义进行转义,以确保其有效性,并会对现有的转义进行大小写规范化。

如果发现某些部分的内容无法作为字符串成功解码,则访问单个部分可能会失败,例如,如果现有的百分号转义表示的字节无法由选择的Encoding解码(参见contentAsString)。

如果uri不是一个有效的data URI,则会抛出FormatException

实现

static UriData parse(String uri) {
  if (uri.length >= 5) {
    int dataDelta = _startsWithData(uri, 0);
    if (dataDelta == 0) {
      // Exact match on "data:".
      return _parse(uri, 5, null);
    }
    if (dataDelta == 0x20) {
      // Starts with a non-normalized "data" scheme containing upper-case
      // letters. Parse anyway, but throw away the scheme.
      return _parse(uri.substring(5), 0, null);
    }
  }
  throw FormatException("Does not start with 'data:'", uri, 0);
}