[Seasar-user:21232] Re: SAStruts, mayaa, mobylet利用時の文字化け

PSC 松本 [E-MAIL ADDRESS DELETED]
2011年 12月 23日 (金) 15:43:58 JST


松本です。

自己解決しましたので、ご報告致します。
原因は、S2ForceWrapMobyletFilterの
isAllForceWrapのパラメータをtrueに設定する
もしくは、
アクションメソッド内で
ForceWrapUtils.setForceWrapRequest();
を呼ぶ。
が、漏れていたためでした。

上記、ForceWrapUtils.setForceWrapRequest();は
最初に試したつもりでいましたが、確実に反映されて
いなかった?ため、原因不明で騒いでしましました。

なので、確実にForceWrapUtils.setForceWrapRequest();を
呼び出すため、インターセプタ化して実装しました。

以上、お騒がせ致しました。
また、レスして頂いた、sugaさん、竹内さん
ありがとうございました。

以上です。


2011年12月23日12:42 PSC 松本 <[E-MAIL ADDRESS DELETED]>:
> 松本です。
>
> sugaさん、竹内さん、アドバイスありがとうございます。
>
> 状況整理のため、ゴミプロを作って単純化し、
> イロイロ実験してみました。
>
> index.html:Windows-31J
> S2ForceWrapMobyletFilter
>  encoding:Windows-31J
>  proxyCharset:Windows-31J
> Mayaa
>  requestCharacterEncoding:Windows-31J
>  defaultCharset:Windows-31J
>
> index.htmlには固定で"あいうえお"を記入。
> Firefoxのエミュレータにて3キャリアでアクセス。
> Content-typeは、Firefoxの
> Tamper Dataアドオンで確認。
>
> docomo:
>  content-type:shift_jis
>  正常に表示
> au:
>  content-type:shift_jis
>  正常に表示
> softbank:
>  content-type:utf-8
>  文字化け(ブラウザの文字エンコーディングをShift_JISにすれば表示)
>
> 今度はエンコードタイプをすべてをUTF-8に変更して実行すると、
>
> docomo:
>  content-type:shift_jis
>  文字化け(ブラウザの文字エンコーディングをUTF-8にすれば表示)
> au:
>  content-type:shift_jis
>  文字化け(ブラウザの文字エンコーディングをUTF-8にすれば表示)
> softbank:
>  content-type:utf-8
>  正常に表示
>
> 上記設定だと、単純にcontent-typeだけ入れ替わっていて
> htmlの内容が変換されていないように見えます。
>
> 以上、よろしくお願い致します。
>
>
> 2011年12月22日18:04 Shin Takeuchi <[E-MAIL ADDRESS DELETED]>:
>> 竹内(stakeuchi)です。
>>
>> Mayaaなどのテンプレートエンジン自体が文字コード変換処理を行っているため
>> mobyletの文字コード変換処理と競合しているのですが
>> これを制御するのがForceWrap機能です。
>>
>> イメージとしては2重で文字コード変換処理を行うため
>> 以下のような形になります。
>>
>> Mayaa メモリ上のユニコードchar→Mayaaで設定した文字コード(proxyCharsetと一致する必要有り)でbyte変換
>> mobylet proxyCharsetでbyteをcharへ戻し→キャリア毎の文字コードでbyte変換
>>
>>
>> このため最終出力結果はmobyletがキャリア毎に判定している
>> 文字コードとなっていますが
>> proxyCharsetのタイミングで文字コードのアンマッチが起きている可能性があります。
>>
>> metaタグに関してはMayaaでも判定しているかもしれませんので
>> 慎重に扱わないと行けませんが
>> (mobyletだけなら<m:charset />タグなどで制御します)
>> 一旦Mayaaの出力をUTF-8に設定して
>> proxyCharsetもUTF-8にしてみてはいかがでしょうか?
>>
>> #テスト自体もUnicode系で行っていますが
>> #文字化けという意味ではwindows-31jよりも発生しづらくなると思います。
>>
>>
>> よろしくお願い致します。
>>
>>
>> 2011年12月20日20:47 PSC 松本 <[E-MAIL ADDRESS DELETED]>:
>>> いつもお世話になっております。
>>> 松本と申します。
>>>
>>> SAStruts+mayaa+mobyletの環境にて構築していまが、
>>> Firefoxのエミュレータにて確認したところ、
>>> softbankの場合のみ文字化けしてしまいます。
>>> (UTF-8でも、Shift_JISでもない?)
>>>
>>> htmlの文字コードはshift_jisです。
>>> <meta http-equiv="Content-Type" content="application/xhtml+xml ;
>>> charset=Shift_JIS"/>
>>> が入っていると問題かと思い、削除してみたものの
>>> 同じ結果となっています。
>>>
>>> web.xmlの設定は以下のとおりです。
>>>
>>> <filter>
>>>    <filter-name>mobyletfilter</filter-name>
>>>
>>> <filter-class>org.seasar.mobylet.http.S2ForceWrapMobyletFilter</filter-class>
>>>    <init-param>
>>>        <param-name>isAllForceWrap</param-name>
>>>        <param-value>true</param-value>
>>>    </init-param>
>>>    <init-param>
>>>        <param-name>proxyCharset</param-name>
>>>        <param-value>Windows-31J</param-value>
>>>    </init-param>
>>> </filter>
>>>
>>> <filter-mapping>
>>>    <filter-name>mobyletfilter</filter-name>
>>>    <url-pattern>/*</url-pattern>
>>>    <dispatcher>REQUEST</dispatcher>
>>>    <dispatcher>FORWARD</dispatcher>
>>>    <dispatcher>INCLUDE</dispatcher>
>>> </filter-mapping>
>>>
>>> 他のエンコードフィルターとの流用はしていません。
>>>
>>> init-paramを削除し、ForceWrapUtils.setForceWrapRequest();
>>> をActionに記述したりもしてみましたが、結果同じです。
>>>
>>> 設定方法の誤りと思うのですが、
>>> 設定方法がイマイチよくわかっていません。
>>> (S2ForceWrapMobyletFilterのcharsetって何?みたいな)
>>>
>>> 原因がお分かりの方がいらっしゃれば、
>>> ご回答お願い致します。
>>>
>>> 以上、よろしくお願い致します。
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user


Seasar-user メーリングリストの案内