2

ruby 1.9.2p320 と rails 3.0.20 を実行しているアプリケーションがあります (これを更新することはできません!)

通常の POST リクエストを介して共通文字と特殊文字 (ä ü ö など) を送信すると、問題なく動作します。AJAX リクエストを介して A から Z に文字を送信することも正常に機能します。

しかし、AJAX 経由で特殊文字 (ä ü ö など) を送信すると、アプリケーションがクラッシュします。

私のバックトレースは、active_support のパラメーターの解析に問題があるように見えることを示しています。

リクエストの例:

Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:60
Content-Type:application/json
X-Requested-With:XMLHttpRequest

Payload: {status_message":{"message":"fghfghfghfhfö"}} # (I found out that it seems to be normal that the encoding messes up here, other rails apps can handle it)

スタック トレースは次のように言っています。

DEBUG rails[14870]: Error occurred while parsing request parameters.
Contents:
FATAL rails[14870]: Encoding::CompatibilityError (incompatible character encodings: UTF-8 and ASCII-8BIT):
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:330:in `[]='
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:330:in `unquote'
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:251:in `strtok'
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:215:in `tok'
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:178:in `lex'
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:46:in `decode'
  activesupport (3.0.20) lib/active_support/json/backends/okjson.rb:612:in `decode'
  activesupport (3.0.20) lib/active_support/json/decoding.rb:14:in `decode'
  actionpack (3.0.20) lib/action_dispatch/middleware/params_parser.rb:47:in `parse_formatted_parameters'
  actionpack (3.0.20) lib/action_dispatch/middleware/params_parser.rb:17:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/flash.rb:182:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/cookies.rb:302:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/callbacks.rb:46:in `block in call'
  activesupport (3.0.20) lib/active_support/callbacks.rb:416:in `_run_call_callbacks'
  actionpack (3.0.20) lib/action_dispatch/middleware/callbacks.rb:44:in `call'
  rack (1.2.7) lib/rack/sendfile.rb:106:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
  rack (1.2.7) lib/rack/runtime.rb:17:in `call'
  activesupport (3.0.20) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.2.7) lib/rack/lock.rb:13:in `block in call'
  <internal:prelude>:10:in `synchronize'
  rack (1.2.7) lib/rack/lock.rb:13:in `call'
  actionpack (3.0.20) lib/action_dispatch/middleware/static.rb:30:in `call'
  railties (3.0.20) lib/rails/application.rb:168:in `call'
  railties (3.0.20) lib/rails/application.rb:77:in `method_missing'
  railties (3.0.20) lib/rails/rack/log_tailer.rb:14:in `call'
  rack (1.2.7) lib/rack/content_length.rb:13:in `call'
  rack (1.2.7) lib/rack/handler/webrick.rb:52:in `service'
  /.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
  /.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
  /.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
INFO rails[14870]: Rendered /.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.0.20/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.3ms)
INFO rails[14870]: Rendered /.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.0.20/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.4ms)

これを解決するには?Railsでそこまでエンコーディングを変更する方法がわかりません。私にはこれを実行する目的がないからです。

4

0 に答える 0