XMLのMIMEタイプ

「application/xml」と「text/xml」の違いが気になってしまったので、調べてみました。
で、コレに言及しているのが「RFC 3023」(RFC 2376は3023と差し替えられて廃止になっている)

5ページの真ん中あたりの

Text/xml and application/xml behave differently when the charset parameter is not explicitly specified.

ヘッダでキャラクタセットが指定されていない時の挙動が違うらしい。

「text/xml」は
「8.5 Text/xml with Omitted Charset」
キャラクタセットが指定されていないと「US-ASCII(ISO-8859-1じゃなくて)」と見なされる(ドキュメント内の宣言(encoding)は無視される)。

「application/xml」は
「8.9 Application/xml with Omitted Charset and UTF-16 XML MIME Entity」
BOMがあればUTF-16として、
「8.10 Application/xml with Omitted Charset and UTF-8 Entity」
BOMがなければUTF-8として、
「8.11 Application/xml with Omitted Charset and Internal Encoding Declaration」
BOMがなく、ドキュメント内の宣言(encoding)があれば、それが適用される。

のだそうな。(8.10と8.11って解釈の順番が逆じゃね?)

とりあえず、いずれもキャラクタセットをつけるのは「STRONGLY RECOMMENDED」となっている(3.1と3.2)ので、UTF-8を使ってるなら

Content-type: text/xml; charset="UTF-8"
Content-type: application/xml; charset="UTF-8"

を投げとけばいいか。

タイトルとURLをコピーしました