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

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


松本です。

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 メーリングリストの案内