QA@IT

Windows2008サーバにおけるクラシックASPの挙動について

4600 PV

Windows2003サーバで稼働していたASPで作成されたWebアプリケーションを
Windows2008サーバに移植した所、ある条件下で文字化けが発生しました。
その条件は下記になります。

①2008サーバに対し、UTF8のページを返すWebアプリケーションをリクエスト。
②①の応答後、2008サーバに対し、shift_jisのページを返すWebアプリケーションをリクエスト。
③応答されるページが文字化けする。

①無しで、②から開始すると問題無くshift_jisのページが応答されます。
②でリクエストしているページは明示的にshift_jisを応答するような記載は
無く、<% Response.CodePage = 932 %>の記述を追加するとshift_jisの
ページが応答されるようになります。

ここで、Windows2008サーバなのかIIS7が原因なのかは不明なのですが、
このような現象を引き起こす原因について、何かご存知の方いらっしゃいましたら、
ご教示のほど、お願いします。

  • サーバー側の問題なのか、ブラウザ側の問題なのか切り分けはできているのでしょうか? そうであれば、どうやって判断・切り分けしたのでしょうか? -
  • SurferOnWww様
    説明不足で申し訳ございません。
    ・クライアント側はブラウザ・OSの種類に関係無く発生する
    ・2003serverで同じ操作を実施しても発生しない
    ・<% Response.CodePage = 932 %>の記述追加で発生しなくなる
    以上から、2008serverが原因と判断しております。
    よろしくご確認のほど、お願いします。

    -
  • それだけでは切り分けられているとは思えないのですが・・・ 応答ヘッダの Content-Type: text/html; charset=shift_jis(UTF-8 の時は charset=utf-8)と実際の本文のエンコーディングは合っているのか、Fiddler2 などでキャプチャして調べられないのでしょうか?
    -
  • そもそもエンコーディング関係の設定 (1) @CODEPAGE ディレクティブの指定は asp ファイルのエンコードに一致しているか、(2) Response オブジェクトの ContentType と Charset は正しく指定されているか、(3) Session.CodePage が指定してあってそれが意図するエンコードと矛盾してないか・・・は確認されたのでしょうか? -
  • 上記のエンコーディング関係の設定については以下のページが参考になると思います。
    http://devlibrary.businessobjects.com/businessobjectsxir2/ja/ja/RAS_SDK/rassdk_com_doc/doc/rassdk_com_doc/BestPractices11.html
    -
  • Response.CodePage と @CODEPAGE ディレクティブその他のエンコーディング関係の設定の優先順位は以下のページの Remarks を見てください。
    http://msdn.microsoft.com/en-us/library/ms524628(v=vs.90).aspx
    -
  • SurferOnWww様 ご回答ありがとうございます。
    有効なencodeについての情報もありがとうございます。
    1点ご確認させて頂きたいのですが、2003serverで起きない問題が2008serverに移行後に発生していることについて、原因が知りたいのですが、SurferOnWww様の見解はページの記述とユーザー環境が要因であるとの認識でしょうか?
    -
  • もともとエンコーディング関係の設定がきちんとされてなければ、たまたま 2003 で問題が顕在化しなかっただけで、2008 で顕在化しても何の不思議もないですですけど? -
  • 上の 3 番目と 4 番目のコメントの件は調べていただけたでしょうか? 結果が出たらそれを書いていただくようお願いします。 -
  • SurferOnWww様 結果についてですが、2008サーバのIISの設定で現状は「仮想ディレクトリの追加」を実施しておりましたが、「アプリケーションの追加」に変更することで、問題が解消しました。
    ただ、頂いたご指摘はもっともな内容ですので、今後のコーディングに活用したいと思います。
    色々とご教示ありがとうございました。
    -
  • サイトにアプリケーションがなければ動かないと思いのですが・・・ それはともかく、どうしてアプリケーションにしたら問題が解決したのでしょうか? -
  • SurferOnWww様 下記サイトをご参照ください。
    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1485142549
    IIS6同様仮想ディレクトリの追加を実施してましたが、IIS7からは「アプリケーションへの変換」、もしくは最初から「アプリケーションの追加」を実施しなければならなかったということになります。
    -
  • それは知ってますが、自分が質問者さんからお聞きしたいのは、仮想ディレクトリをアプリケーションに変換することによって、エンコーディング関係の設定(上の 3 番目と 4 番目のコメントの件)がどのようになったのかということです。(その前に、仮想ディレクトリにしただけの状態で Response.CodePage の設定等サーバー側のコードが有効になるのかという疑問もありますが。) -
ウォッチ

この質問への回答やコメントをメールでお知らせします。