1

Ruby 1.9 で実行されている Rails 3.2 アプリの場合:

content-type (application/x-www-form -urlencoded)。

これは、 HTTP1.1 仕様に従って有効であると解釈される可能性がありますが、私の制御範囲外です (コンテンツ タイプでエンコーディングが指定されている場合、100% 有効であることは確かです)。

ただし、 Rails 3 は自動的に UTF-8 を想定しているようです。そのため、非ASCII文字はエラーを引き起こしています。これを修正する良い方法はありますか?(アクション内でチェックと再変換をハッキングするだけではありませんか?)

PS: 役立つ場合は、エラーを呼び出すテスト フラグメントを次に示します。

  post "incoming", {'content'=>"some content with a pound-sterling sign encoded like this: \xA3 "}
4

1 に答える 1

1

これが私のpro-temの答えです(私の場合、ソースがテキストを8859-1でエンコードすることを常に知っており、重要なパラメーターが1つしかないことを前提としています):

params['content'].force_encoding('iso-8859-1').encode!

ただし、これはすべてのパラメーターに対して実行できます(1レベルの深さまで)

def params_to_iso_8859_1 
  params.each_value{|v| v.force_encoding('iso-8859-1').encode! if v.respond_to(:force_encoding)}
end

これはフィルターになる可能性があります。

ネストされたパラメーターがある場合、または投稿のリクエストパラメーターで指定されたエンコーディングを確認したい場合は、もう少し複雑です。

于 2012-12-03T14:39:08.187 に答える