parse静态方法
- String uri
将字符串解析为data URI。
字符串必须符合以下格式
'data:' (type '/' subtype)? (';' attribute '=' value)* (';base64')? ',' data
其中type
、subtype
、attribute
和value
根据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);
}