質問

JSONを返すWebAPIを作成しました。

初期データは次のとおりです(UTF-8エンコード):

@text="Rosenborg har ikke h\xC3\xB8rt hva Steffen"

次に、私のオブジェクトに.to_jsonを使用して、APIによって送信されるものがあります(ISO-8859-1エンコーディングだと思います):

"text":"Rosenborg har ikke h\ufffd\ufffdrt hva Steffen"

私はクライアント側でhttpartyを使用しています、そしてそれが私が最終的に得るものです:

"text":"Rosenborg har ikke h��rt hva"

WebAPIとクライアントアプリの両方がRuby 1.9.2とRails 3を使用しています。

このエンコードの問題で少し迷子になりました... UTF8エンコードヘッダーをRubyファイルに追加しようとしましたが、何も変更しませんでした。エンコード /デコードパーツがどこかに欠けていると思います...誰かがアイデアを持っていますか?

どうもありがとうございます !!!ヴィンセント

役に立ちましたか?

解決

Ruby 1.9では、エンコードは現在明示的です。ただし、Railsは、予想されるエンコードで応答を送信するように構成されている場合とできない場合があります。グローバル構成設定を設定する必要があります。

Encoding.default_external = "utf-8".

Rubyがデフォルトでシリアル化に指定するエンコードは、プラットフォームのデフォルトであると思います。 CodePage-1251になる窓のアメリカで。他の国には別のエンコードがあります。

編集: :JSONがMySQLに対して実行されている場合は、このURLも参照してください。 https://rails.lighthouseapp.com/projects/8994/tickets/5210-encoding-problem-in-json-format-response

編集2: :Rails Coreとその一連のライブラリ(Activerecord、et。al。)は、送信するすべての値をエンコードするencoding.default_external設定を尊重します。残念ながら、エンコードはRubyにとって比較的新しい概念であるため、サードパーティライブラリごとに適切なエンコードを調整しているわけではありません。これらのライブラリに追加の構成設定が必要になる場合があります。これには、MySQLと使用していたRSOLRライブラリが含まれます。

1.9シリーズの前のRubyのすべてのバージョンで、文字列は単なるバイトの配列でした。あなたがそのように長い間考えていたとき、複数の文字列エンコーディングの概念に頭を包むのは難しいです。さらに混乱しているのは、Java、C#、および何らかの形のUTFをネイティブ文字列形式として使用する他の言語とは異なり、Rubyは各文字列を異なる方法でエンコードできるようにすることです。振り返ってみると、それは間違いかもしれませんが、少なくとも今では彼らはエンコードを尊重しています。

Encoding.force_encoding メソッドは、その新しいエンコードでバイトシーケンスを処理するように設計されていますが、基礎となるデータのいずれも変更しません。したがって、無効なバイトシーケンスを持つことができます。呼ばれる別の方法があります .encode() これにより、バイトがあるエンコードから別のエンコードに変換され、有効なバイトシーケンスが保証されます。詳細については、これをお読みください:

http://blog.grayproductions.net/articles/ruby_19s_string

他のヒント

わかりました、私はついに問題が何であるかを知りました...

RSOLRを使用してSOLRからデータを取得しています。デフォルトでは、すべての結果をエンコードすることは、残念ながら、ここで述べたように「US-ASCII」です(自分で確認されています)。http://groups.google.com/group/rsolr/browse_thread/thread/2d4890fa7737e7ef#

したがって、次のようにエンコードを強制する必要があります。

my_string.force_encoding(Encoding::UTF_8)

RSOLRに提供する素晴らしいエンコードオプションがあるかもしれません!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top