Docomo実機から日本語文字をパラメータ渡しした時の挙動について

225 views
Skip to first unread message

redmountain

unread,
Apr 12, 2011, 4:28:26 PM4/12/11
to jpmobile
瀬筒と申します。

Ruby 1.9.2 + Rails 3.0.5 + jpmobile 1.0.0.pre
環境にて、日本語の含まれたフォームをgetパラメータでRails側に渡すと、
下記のエラーが発生します。

エラーメッセージの内容 ==================
ArgumentError
invalid byte sequence in Windows-31J

jpmobile (1.0.0.pre) lib/jpmobile/emoticon.rb:35:in `gsub'
jpmobile (1.0.0.pre) lib/jpmobile/emoticon.rb:35:in
`external_to_unicodecr_docomo'
:
=====================================

使用したフォームのサンプル ===============
<form action="some/action" method="get">
<input type="submit" value="日本語の含まれた文字列" />
</form>
=====================================

上記フォームの場合、FireMobileSimulator 及び Au, Softbank 実機ではエラーが発生せず、
Docomo実機でのアクセスを行った場合のみ、上記エラーが発生しました。

external_to_unicodecr_docomo メソッド内で str.valid_encoding? を実行すると
Rails 側の params が渡された際に false になっていましたので、
取り急ぎ下記修正で上記の挙動を回避しています。

=====================================
def self.external_to_unicodecr_docomo(str)
+ unless str.valid_encoding?
+ str = str.force_encoding("UTF-8").encode("Windows-31J")
+ end

str.gsub(DOCOMO_SJIS_REGEXP) do |match|
sjis = match.unpack('n').first
unicode = DOCOMO_SJIS_TO_UNICODE[sjis]
unicode ? ("&#x%04x;"%unicode) : match
end
end
=====================================

他の解決策等ありましたらご教示頂ければと思います。
どうぞ、よろしくお願いします。

Shin-ichiro OGAWA

unread,
Apr 13, 2011, 12:35:59 AM4/13/11
to jpmo...@googlegroups.com
小川です。

> 上記フォームの場合、FireMobileSimulator 及び Au, Softbank 実機ではエラーが発生せず、
> Docomo実機でのアクセスを行った場合のみ、上記エラーが発生しました。

手元の古い実機(N905i)で確認したところ、
記載していただいたフォームだけではエラーにはなりませんでした。

再現する最小構成とエラーログの詳細などわかる範囲で出していただけるとありがたいです。

添付のパッチで確かに動作はすると思うのですが、
副作用と原因がわからないためそのままでは適用できません。

なんとなくはわかるんですが、具体例がないと直しようがないのが、
1.9.2のEncodingでの辛いところです。

--------
小川 伸一郎 (Shin-ichiro OGAWA)
rust....@gmail.com
GPG ID 94B70E36 / 75360751
fingerprint: {C64E 9826 8A75 723E DE54 / 70A8 F623 220C 94B7 0E36}
http://stnard.jp/
http://twitter.com/conceal_rs/
http://iddy.jp/profile/rust/

2011/4/13 redmountain <sez...@gmail.com>:

> --
> このメールは Google グループのグループ「jpmobile」の登録者に送られています。
> このグループに投稿するには、jpmo...@googlegroups.com にメールを送信してください。
> このグループから退会するには、jpmobile+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/jpmobile?hl=ja からこのグループにアクセスしてください。
>
>

Tietew

unread,
Apr 15, 2011, 6:01:51 AM4/15/11
to jpmo...@googlegroups.com, Shin-ichiro OGAWA
2011年4月13日13:35 Shin-ichiro OGAWA <rust....@gmail.com>:

>> 上記フォームの場合、FireMobileSimulator 及び Au, Softbank 実機ではエラーが発生せず、
>> Docomo実機でのアクセスを行った場合のみ、上記エラーが発生しました。
>
> 手元の古い実機(N905i)で確認したところ、
> 記載していただいたフォームだけではエラーにはなりませんでした。

F-09Aなんですが、どうも accept-charset を見ているっぽいです。
Rails 3.0.6 + Ruby 1.8 で、二重にエンコードされたような文字化けになりました。

html_options_for_formを書き換えたらなおりました。

def html_options_for_form(url_for_options, options, *parameters_for_url)
super.tap { |html_options|
html_options['accept-charset'] = request.mobile.default_charset
if request.mobile
}
end

--
Tietew <tie...@gmail.com>
// Powered by GMail

Reply all
Reply to author
Forward
0 new messages