Mamoru WATANABE
mamor****@hotma*****
2003年 1月 6日 (月) 15:33:54 JST
渡辺です。 明けましておめでとうございます。 > media.xreg のエンコーディングを利用できるように修正して, > 渡辺さんの UTF8ParameterParser.java の情報を元に, > DefaultJetspeedParameterParser.java を作成しました. > これにより,表示するエンコーディングが media.xreg > > content.defaultencoding > デフォルト値の順に利用されると思います. > JetspeedTemplatePage の変更は,cm.getPreferredType().getCharSet() を > 利用しようと思ったのですが, null を返してくるので,使うのをやめました. > getPreferredType() か getCharSet() を修正した方が良いような気も > していますが,とりあえず,JetspeedTemplatePage で対応しています. > 以上のことに関して,何か問題がありそうでしたら,ご指摘ください. > よろしくおねがいします. 私が動かした範囲では問題がないことを確認しました(日本語のユーザ名を除 く)。ただ若干気になる点があるので、それを書きます。 まずはmedia.xregを利用するという点です。 オリジナルのJetspeedではmedia.xregの<character-set>は全く利用されてい ません。ここの値を変えてもHTTPヘッダのContent-Typeには影響しません。 Content-Typeを変更するにはJR.pのcontent.defaultencodingの値を変更する しかないようです。このmedia.xregの<character-set>の位置付けがイマイチ 不明であるという現状で、これを使って良いのかが引っ掛かります。 また以前のメールにも書きましたが、 http://www.mail-archive.com/jetspeed-dev%40jakarta.apache.org/msg05176.html に書いてあるように、近い将来<meta>タグにcharsetを指定した場合には、そ のcharsetを使うようにしようとしていることを考えると、media.xregの <character-set>やJR.pのcontent.defaultencodingの値を利用する方法では、 それぞれ指定できる値が一つだけなので、上記<meta>タグへの対応が不可能に なってしまうのではないかと思われます。 ところで、JetspeedのProfiler Fallback optionsを使えば各国語対応させる ことができますが、これはWebブラウザの言語設定によって表示するページを 言語・国別に分けているだけであり、それらページを記述している文字コード をmedia.xregの<character-set>やJR.pのcontent.defaultencodingの値のよう に単一のcharacter-setで扱うには現在のところUTF-8しかないわけで、現在の Jetspeedのやり方では、各国語対応させる場合はUTF-8を利用し、各国語対応 させない場合はその利用する言語・国用のcharacter-setを指定するしかない ような気がします。 もしProfiler Fallback optionsを使って以下のようにJR.pを設定した場合で も、JR.pのcontent.defaultencodingをShift_JISにしてしまえば、zh_TWのペー ジは結果的に文字化けしちゃいます。 services.Profiler.fallback.language=true services.Profiler.fallback.country=true content.defaultencoding=Shift_JIS そこでTR.pを見てみると、以下のような記述があります。 # This property specifies a file containing mappings between locales # and the corresponding character encodings. The service itself # contains a hardcoded set of most common mappings. # The file should use the Java property file syntax, i.e. # <lang_country_variant>=<charset> # #services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties このMimeTypeServiceを使うことでlocaleとcharsetのマッピングが可能になる のではないかと思われます。ParameterParserの setRequest(HttpServletRequest res)メソッドでHttpServletRequestにある CGI変数のPATH_INFOを取得しており、このPATH_INFOには /media-type/html/language/ja/country/null/user/turbine/page/default.psml のように"language/ja","country/null"と言語と国が対になって格納されてい ます。この情報を基にMimeTypeServiceのgetCharSetメソッドを使って character-setを取得する(もしPATH_INFOにlanguage,countryが無ければTR.p のlocale.default.languageとlocale.default.countryを使って取得する)よ うにしたらいいのかなと思います。 因みにTurbineのorg.apache.turbine.services.mimetype.util.CharSetMapに は以下のように39個が予めマッピングされています。 "ar","ISO-8859-6" "be","ISO-8859-5" "bg","ISO-8859-5" "ca","ISO-8859-1" "cs","ISO-8859-2" "da","ISO-8859-1" "de","ISO-8859-1" "el","ISO-8859-7" "en","ISO-8859-1" "es","ISO-8859-1" "et","ISO-8859-1" "fi","ISO-8859-1" "fr","ISO-8859-1" "hr","ISO-8859-2" "hu","ISO-8859-2" "is","ISO-8859-1" "it","ISO-8859-1" "iw","ISO-8859-8" "ja","Shift_JIS" "ko","EUC-KR" "lt","ISO-8859-2" "lv","ISO-8859-2" "mk","ISO-8859-5" "nl","ISO-8859-1" "no","ISO-8859-1" "pl","ISO-8859-2" "pt","ISO-8859-1" "ro","ISO-8859-2" "ru","ISO-8859-5" "sh","ISO-8859-5" "sk","ISO-8859-2" "sl","ISO-8859-2" "sq","ISO-8859-2" "sr","ISO-8859-5" "sv","ISO-8859-1" "tr","ISO-8859-9" "uk","ISO-8859-5" "zh","GB2312" "zh_TW","Big5" 実際に使えるかどうかは全く自信なしです。(^_^; -- 渡辺 衛 mamor****@hotma*****