Content-Type: text/html; charset=utf-8;
を出力しているのに、Firefoxにtext/plain扱いされてしまうのですが、原因は何が考えられるでしょうか?
またIEに文字コードをSJISだと勘違いされてしまうのですがこれの原因は何が考えられるでしょうか?
これは、Content-Type: text/html; charset=utf-8が
全く効いていないということですよね。
Content-Type: text/html; charset=utf-8の後には、
改行が二つ必要になります。
つまり、たとえばperlで書くなら、
print "Content-type: text/html; charset=utf-8\n\n";
ということになります。utf-8の直後に改行2つです。
まずはそのへんをチェックしてみてください。
これは、Content-Type: text/html; charset=utf-8が
全く効いていないということですよね。
Content-Type: text/html; charset=utf-8の後には、
改行が二つ必要になります。
つまり、たとえばperlで書くなら、
print "Content-type: text/html; charset=utf-8\n\n";
ということになります。utf-8の直後に改行2つです。
まずはそのへんをチェックしてみてください。
改行は二つありますし、改行コードもUNIXの物ですし…といじっていたらうまく行きました。
このCGIはテンプレートをファイルから読み込んでコンテンツを埋め込んで出力する物だったのですが、そのテンプレートファイルをUTF-8で保存する際にBOMを取り除いていなかったためContent-typeの前に余計な文字がついてうまく認識されなくなったことが原因だったようです。
HTTPヘッダで文字コードを指定するようにすれば、コードの問題は解決すると思います。text/plainについてはサーバーが対応していないと厳しいかもしれません。
「Content-Typeエンティティヘッダフィールドは適切なものを指定してください」
http://www.mozilla.gr.jp/standards/webtips/webtips0033.html
通常、Apache等のWebサーバアプリケーションは*.htmlや*.htmであればtext/htmlを付けるように初めから設定されています。
問題なのは*.shtmlのように普段使用しない拡張子のファイルです。 このようなファイルはtext/plainとして扱われる可能性があります。
また、CGIのように自前でHTTPレスポンスヘッダを生成する場合です。 この場合にも内容にあった適切なヘッダを生成するように注意しなくてはいけません。
「メタタグによる文字コード指定の有効性」
http://www.shtml.jp/mojibake/meta.html
メタタグによる文字コードの指定はできるだけ上の方でやった方がよい訳です。もっと言うならHTMLファイルの中で記述しているのでは遅すぎるとも言えます。純然たるHTMLファイルの場合は、どうしようもありませんが、もしperlやPHPを利用されているのならば、是非、自力で文字コードをHTTP ヘッダーで指定するべきです。
>HTTPヘッダで文字コードを指定するようにすれば、コードの問題は解決すると思います。
質問の意図をご理解いただけなかったようで残念です。
改行は二つありますし、改行コードもUNIXの物ですし…といじっていたらうまく行きました。
このCGIはテンプレートをファイルから読み込んでコンテンツを埋め込んで出力する物だったのですが、そのテンプレートファイルをUTF-8で保存する際にBOMを取り除いていなかったためContent-typeの前に余計な文字がついてうまく認識されなくなったことが原因だったようです。