続:POST 後のページの文字化け

2003年11月14日(金) by level
B ?
Tags: 開発

昨日の Web 標準普及プロジェクト「MozillaはPOST後に文字コードを自動判別しないことに注意してください」の件、引用した内容は、「POST 後のページ文字コードの自動認識が行われない」という前提の下、「では文字コードが不明なケースではどう処理するか?」という問いの答えになっていると考えれば理にかなっていますね。いずれにせよ、ちょっと分り辛い文章だと思います。(中野さんよろしく!)

ところで、これからが今日の本題。

会社のケースで文字化けするのはこれが原因ではありませんでした。結論から言うと、タブブラウザ拡張のウィンドウモードが「自分で開いたときだけ複数のブラウザを開く」のときの問題のようです。

まず、問題をクリアにするために、タブブラウザ拡張のウィンドウモードをデフォルトと同じ「複数のブラウザを開く」にしたときの動作を見てみます。

実は元のページのコードは Shift_JIS、POST 後に新規ウィンドウに表示されるページ(プレーンテキスト)も Shift_JIS であり問題なく表示されました。念のため、HTTP のレスポンスヘッダのログを取ってみました。

http request [
  POST ... HTTP/1.1
  Host: ...
  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.6a) Gecko/20031030
  Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
          text/plain;q=0.8,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
  Accept-language: ja,en-us;q=0.7,en;q=0.3
  Accept-Encoding: gzip,deflate
  Accept-Charset: ISO-2022-JP,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 300
  Connection: keep-alive
  Referer: http://...
  Cookie: ...
]

http response [
  HTTP/1.1 200 OK
  Date: Fri, 14 Nov 2003 00:14:02 GMT
  Server: Apache/1.3.26 (Unix) mod_jk
  Keep-Alive: timeout=15, max=120
  Connection: Keep-Alive
  Transfer-Encoding: chunked
  Content-Type: text/plain
]

response に文字コード情報が含まれていませんが、前のページの情報を引き継いで Shift_JIS で表示されたと考えられます。

次に、タブブラウザ拡張のウィンドウモードを「自分で開いたときだけ複数のブラウザを開く」にしたときの動作です。この場合、POST 後に新規ウィンドウが開きかけますがすぐに閉じ、新規タブとして新しいページが開きます。このような動作自体はタブブラウザ拡張の仕様通りの動作と考えられます。ただし、この場合、開いたタブの文字コードはなぜか ISO-2022-JP となります。いや、正確に言うと、デフォルト文字コード(Navigator|languages|Character Coding)で設定された文字コードとなります。

このときの HTTP レスポンスヘッダは興味深いものがあります。このケースでは、http request と http response が2回ずつ出現します(request 2回に続けて response が2回。これは一度新規ウィンドウを開きかけて、新規タブで開きなおすために起こるものでしょうか)。 2回の request は上のケースとまったく同じものです。一方、response の1個目は上のケースとまったく同じ、2個目は少し異なって次のようになります。

http response [
  HTTP/1.1 200 OK
  Date: Fri, 14 Nov 2003 00:19:09 GMT
  Server: Apache/1.3.26 (Unix) mod_jk
  Keep-Alive: timeout=15, max=120
  Connection: Keep-Alive
  Transfer-Encoding: chunked
  Content-Type: text/html; charset=Shift_JIS
]

ここでは Content-Type が text/html、文字コードとして Shift_JIS が設定されています。表示されるページはプレーンテキストです。しかし、なぜかデフォルト文字コードである ISO-2022-JP で開いてしまいます。デフォルト文字コードを Shift_JIS にすれば正しく Shift_JIS で開いてくれます。

ということで、タブブラウザ拡張が POST 後の target="_blank" のページを新規タブとして開くときにデフォルト文字コードで開いてしまうのがおかしいように思います。結局今はデフォルト文字コードを Shift_JIS にしてしのいでいます(新規ウィンドウをタブで開いてくれる動作は捨てがたいので)。

ちなみに環境は、Mozilla 1.6a、タブブラウザ拡張(確認するのを忘れたけど、たぶん10月後半のものだと思う)、Windows 2000 です。

コメント

コメントはありません。

トラックバック

トラックバックは検索対象外です。

この記事にリンクしているページ < >

  1. データがありません。