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);
}