Androidアプリから入力を取得するRailsサーバーがあります。この Android アプリは一部のデータを JSON 形式でサーバーに渡していますが、アプリの現在のバージョンでは文字列が UTF-8 にエンコードされていないため、「\uE0」ではなく「\xE0」などの「バイナリ」のままです。しかし、このバイナリ文字列をサーバーに送信するとき、アプリは http 接続をエンコーディング UTF-8 に設定します。つまり、この文字列を受信する Web サーバーは、UTF-8 でエンコードされていると考えますが、実際には「バイナリ」でエンコードされています。
次の行でこれを部分的に解決しました。
# encode comment to UTF-8 and strip whitespace from comment field
params[:data][:text].encode('utf-8', 'binary', :invalid => :replace, :undef => :replace).gsub!(/\s+/, " ")
これはここから取られました: Ruby String.encode はまだ「UTF-8 の無効なバイト シーケンス」を与えます
私の開発システムでは、Web サーバー WEBrick でビルドを開始すると問題なく動作しますが、残念ながら、Apache / Passenger で実行されている実稼働システムでは、間違った文字が「?」に置き換えられず、異なる動作になります。しかし、最初の無効なもので壊れます。
WEBrickで私は得る
' so un\xE4hnlich ' => 'so un?hnlich'
同じコード、ruby (1.9.3) および rails (3.1.1) バージョンの Apache では、
' so un\xE4hnlich ' => 'so un'
私にできることがあるはずです。どこで試したらよいかわかりません: apache 構成、コード、ruby バンドルで...?