1

セキュリティバグのため、Rails 2.3.17にダウングレードしてアップグレードしましたが、DBに保存したjson文字列にUnicodeが含まれている場合、それらをデコードできません:(。そのような文字列を処理する方法はありますかそれは正しくデコードされますか?

e = ActiveSupport::JSON.encode({'a' => "Hello Unicode \u2019"})
ActiveSupport::JSON.decode(e)

私にくれます

RangeError: 8217 out of char range
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/backends/okjson.rb:314:in `unquote'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/backends/okjson.rb:251:in `strtok'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/backends/okjson.rb:215:in `tok'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/backends/okjson.rb:178:in `lex'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/backends/okjson.rb:46:in `decode'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/backends/okjson.rb:612:in `decode'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.17/lib/active_support/json/decoding.rb:14:in `decode'
from (irb):30
from /usr/local/bin/irb:12:in `<main>'

そのようなDBから来ているので、最初の行を変更することはできません。

これは以前は機能していました。

4

3 に答える 3

3

ActiveSupport でバックエンド JSON プロバイダーを変更できます。

アプリケーション初期化子に追加ActiveSupport::JSON.backend = "JSONGem"します (application.rb に追加しました)。これにより、activesupport を 3.0.20 にアップグレードした後に発生した Unicode 解析の問題が修正されました。

この更新の原因となった脆弱性に関する通知を参照してください- この回避策は 2.3.16 にも適用される必要があると記載されています。

Rails コンソールから:

> ActiveSupport::VERSION::STRING
 => "3.0.20" 
> ActiveSupport::JSON.decode('{"test":"string\u2019"}')
RangeError: 8217 out of char range
> ActiveSupport::JSON.backend = "JSONGem" 
> ActiveSupport::JSON.decode('{"test":"string\u2019"}')
 => {"test"=>"string’"}
于 2013-02-15T03:14:14.323 に答える
0

JSON gemはこれを正しく処理します。

注意として、gem は他の JSON パーサーよりもはるかに厳密です。例えば:

{ 'test' : 'value' }

これは問題ないように見えますが、有効な JSON ではありません。

なんらかの理由で、非 UTF-8 に精通した JSON パーサーが 2.3.16 パッチの一部として出荷されましたが、これはメンテナーの側で本当にずさんです。

于 2013-02-12T01:30:28.343 に答える
0
  • 2.3.15 に切り替えてください。修正が適用されたときなので問題ありません。
  • Railsでこのプロジェクトを始めた開発者を呪う
  • 急いでPythonへの移植作業を開始
于 2013-02-12T01:46:30.947 に答える