Метод parse
UriData parse(Разбирает строку как 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).
Исходный код
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 new FormatException("Does not start with 'data:'", uri, 0);
}
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-core/UriData/parse.html