Shinsuke SUGAYA
shins****@yahoo*****
2002年 12月 20日 (金) 13:52:22 JST
こんにちは、 > このmedia.xregにある<character-set>について以前から不思議に思っていた > のですが、これはデフォルトではUTF-8になっていて、この値をShift_JISに変 > 更してもJetspeedのページのContent-Typeは(PCのWebブラウザを使う限り) > "text/html; charset=UTF-8"で不変です。 > > 因みにorg.apache.jetspeed.util.MimeTypeを見てみると、HTMLはUTF-8固定に > なっています。 たしかに、MimeType で UTF-8 になっているのに気がつきましたが、FIXME が入っているので、 そのうち、修正が入るだろうと考えています。たぶん、この辺が中途半端に後回しに なっているような気がします・・・。英語圏の人にとっては、それほど重要でないし・・・。 > また、org.apache.jetspeed.modules.pages.JetspeedTemplatePageを見てみる > と、JR.pのcontent.defaultencodingの行に指定したエンコーディングを > RunDataのcharactersetに設定しているようで(JR.pにエンコーディングの指 > 定がない場合はUTF-8)、実際にcontent.defaultencoding=Shift_JISと設定し > てJetspeedを使ってみると、"Content-Type:text/html; charset=Shift_JIS" > になります。 JetspeedTemplatePage のその部分を確認しましたが、 data.setCharSet( JetspeedResources.getString(JetspeedResources.CONTENT_ENCODING_KEY,"utf-8") ); の行は、 data.setCharSet( cm.getPreferredType().getCharSet() ); とするのが正しいのではないでしょうか。そうすれば、media.xreg から とってこれる気がしています。(まだ、調査段階ですが・・・) media.xreg で指定されていなければ、content.defaultencoding を 使うようにすれば、すっきりすると思います。 > ということで、以下のような流れになればいいのではないかと考えました。 > (1) JR.pに「content.defaultencoding=エンコーディング名」を指定して > Jetspeedを起動 > (2) Jetspeedのページにアクセスする。 > (3) Jetspeedはコンテンツをリクエストしたブラウザに対して、HTTPヘッダに > 「Content-Type:text/html; charset=xxxxxx」と上記設定のエンコーディ > ングを付けてコンテンツを返す。 > (4) WebブラウザはHTTPヘッダのContent-Typeフィールドにしたがって、自分 > のエンコーディングの設定を指定されたエンコーディングに合わせてコン > テンツを表示する。 > (5) WebブラウザからJetspeedの次の画面に移るためにリクエストをHTTPサー > バに投げるときは、上記(3)のエンコーディングを使う。結果的に(1)で設 > 定されているものと同じになる。 > (6) Jetspeedは(4)で投げられたリクエストを受ける時に、その文字コードを > 以下の順で決定する。 > (a) リクエストのContent-Typeフィールドにcharset指定がある場合 > はそれを使う。 > (b) JR.pに指定されているエンコーディングを使う。 > (c) US-ASCIIを使う。 > (7) (3)に戻る。 > > つまり、ParameterParserは上記(6)の部分に相当します。 私も流れ的にはそのような感じだと思います。でも、(b) の前に、media.xreg から とる方法を入れた方が良いと思います。そうしないと、いろいろなデバイスの エンコーディングに対応できない気がします。media.xreg で指定されていなければ、 content.defaultencoding のが良いのではないでしょうか。 > ただし問題が残っていて、以下の3つの条件が揃った時には文字コードの判定 > ができなくなります。 > (1) default.vmに<meta http-equiv="Content-Type" content="text/html; > charset=Shift_JIS">とか<meta http-equiv="charset" > content="Shift_JIS">が記述されている。 > (2) 上記<meta>タグに記述されているエンコーディングがJR.pの > content.defaultencodingの行の値と違っている。 > (3) 「アカウントの編集」のようなHTMLフォームに日本語を入力して送信し > た場合 > > ただし現時点では<meta>タグについては、 > http://www.mail-archive.com/jetspeed-dev%40jakarta.apache.org/msg05176.html > ここに書いてある通り正常に解釈されていないので問題はないのですが、近い > 将来問題となりそうです。 jslink あたりで、meta タグの文字列を返すのを用意しておいて、それを使ってもらう ようにするのが、混乱しないで済むような気がします。他にも良い方法があるかもしれませんが。 #やればやるほど、別な問題が見つかっていくような気が・・・。 shinsuke __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/