進化する仕様を読んでから何年にもわたって、私はRFC 3986が最終的にエスケープ オクテット シーケンスの UTF-8 エンコーディングに落ち着いたと思っていました。つまり、私の URI が持っている場合、%XX%YY%ZZ
(スキーム固有の部分の任意の URI に対して) デコードされたオクテットのシーケンスを取得し、結果のバイトを UTF-8 として解釈して、デコードされた情報が意図されているものを見つけることができます。decodeURIComponent()
実際には、このデコードを自動的に行うJavaScript を呼び出すことができます。
data:
次に、 URIの仕様であるRFC 2397charset
を読みました。これには、 (当然のことながら) エンコードされたデータの文字セットを示す引数が含まれています。しかし、それはどのように機能しますか?URI に2 オクテットのエンコードされたシーケンスがある場合%XX%YY
、デコードされた 2 つのオクテットは UTF-8 シーケンスとして解釈されるべきではなく、2 つの別個のラテン文字として解釈されるべきであることを示します (ISO-8859-1 の各バイトが表すように)キャラクター)?RFC 2397 は、「ギリシャ語 [sic] 文字」の例を示しているため、これを示しているようです。data:
charset=iso-8859-1
data:text/plain;charset=iso-8859-7,%be%fg%be
しかしこれは、JavaScript decodeURIComponent()
(UTF-8 でエンコードされたオクテットを想定) を使用してデータ URI から文字列を抽出できないことを意味しますね。これは、文字セットが UTF-8 以外の場合、データ URI の独自のデコードを作成する必要があるということですか?
さらに、これは RFC 2397 が現在 RFC 3986 と競合していることを意味しますが、これは UTF-8 が想定されていることを示しているようです? それとも、RFC 3986 は「新しい URI スキーム [s]」のみを参照していますか? つまり、data:
URI スキームは適用されず、エンコードされたオクテットが何を意味するかを指定するための独自の手法を持っていますか?
現時点での私の最善の推測ではdata:
、独自のルールに従って動作し、UTF-8 以外の文字セットを示している場合はdecodeURIComponent()
、JavaScript 以外のものを使用する必要があります。交換方法に関する推奨事項も歓迎します。