За годы, прошедшие с ознакомления с меняющимися спецификациями, я предположил, что RFC 3986 окончательно установил кодировку UTF-8 для последовательностей escape-октетов. То есть, если мой URI имеет %XX%YY%ZZ
, я могу взять эту последовательность декодированных октетов (для любого URI в части, относящейся к схеме) и интерпретировать полученные байты как UTF-8, чтобы узнать, какая была расшифрованная информация. На практике я могу назвать JavaScript decodeURIComponent()
, который автоматически выполняет это декодирование для меня.Charset in data URI
Затем я прочитал спецификацию для data:
URIs, RFC 2397, который включает в себя charset
аргумент, который (естественно) указывает набор символов закодированных данных. Но как это работает? Если у меня есть двухоктевая кодированная последовательность %XX%YY
в моем data:
URI, то charset=iso-8859-1
указывает, что два декодированных вектора должны не быть интерпретированы как последовательность UTF-8, а как два отдельных латинских символа (как каждый байт в ISO -8859-1 - символ)? RFC 2397, кажется, указывает на это, так как это дает пример «греческих символов [так в оригинале]»:
data:text/plain;charset=iso-8859-7,%be%fg%be
Но это означает, что JavaScript decodeURIComponent()
(который предполагает UTF-8 закодированных октета) не может быть использована для извлечения строка из URI данных, правильно? Означает ли это, что мне нужно создать собственное декодирование для URI данных, если кодировка - это нечто помимо UTF-8?
Кроме того, означает ли это, что RFC 2397 теперь находится в конфликте с RFC 3986, что, как представляется, указывает на то, что UTF-8 предполагается? Или RFC 3986 ссылается только на «новую схему URI [s]», что означает, что схема URI data:
получает grandfathered и имеет свой собственный метод определения того, что означает кодированные октеты?
Моя лучшая догадка заключается в том, что data:
играет по своим собственным правилам, и если это указывает на кодировку, отличную от UTF-8, мне придется использовать что-то отличное от decodeURIComponent()
в JavaScript. Любые рекомендации по методу замены также приветствуются.