Faraday: Content-Typeがtext / xmlの場合、response.bodyはASCII-8BITです。 charset = utf-8

作成日 2012年04月16日  ·  9コメント  ·  ソース: lostisland/faraday

初めてファラデーを使用するので、間違ったことをしている可能性がありますが、以下のresponse.bodyエンコーディングはASCII-8BITです。

  def self.search(term)
    connection = Faraday.new(url: 'https://en.wikipedia.org')
    response = connection.get do |req|
      req.options = { :timeout => 5, :open_timeout => 3 }
      req.url '/w/api.php' , action: 'opensearch', format: 'xml', search: term
    end
    puts response.body.encoding
  end

1.9.2では、これによりREXMLはEncoding::CompatibilityErrorをスローします。

ファラデーにUTF-8でresponse.bodyを提供するように強制する方法が見つかりません

これに対する好ましい解決策は何ですか?

bug

最も参考になるコメント

私が使用した回避策は次のとおりです。

response.body.force_encoding('utf-8')

ヤフダはここで問題についての論文を持ってい

全てのコメント9件

同じ問題が発生しました。 何か案は?

私が使用した回避策は次のとおりです。

response.body.force_encoding('utf-8')

ヤフダはここで問題についての論文を持ってい

Faradayは、基になるアダプターから応答本文を渡すだけだと確信しています。 ファラデーでエラーを発生させたり、データの不可逆変換を実行したりするかどうかはわかりません。 本当に必要な場合は、カスタムミドルウェアで実行できます。

けっこうだ。 問題が他の場所にある場合は、表示されているように、時間内にクリーンアップされると思います。 それは私にとってショーストッパーではありません。

ファラデーのバグではないので終了します。

基盤となるアダプター(少なくともnet / http)がエンコード変換を行うかどうかはわかりません。 RubyのEncoding.default_externalを 'US-ASCII'のようなものに設定してから、Content-Type = '...;でエンドポイントをヒットすることができます。 charset = utf-8 '... net / httpは、charset文字列

これについてさらに調査しました-基盤となるアダプターの一部はContent-Type文字セットを処理しますが、処理しないものもあります。

EM-HTTP-Requestはそうします。 [コミット]。
パトロンはそうします。 [コミット]。
HTTPClientは[[commit](https://github.com/nahi/httpclient/commit/e5efea5afb3b5cf6ead3a131644dee71be1ee5e9)] [[issue](https://github.com/nahi/httpclient/issues/26)]を実行します。
TyphoeusとExcon(およびnet / http)は表示されません。

おそらく、試さないアダプター用のオプションのミドルウェアを提供するのが最も良いことだと思いますが、ええ、私は同意します。これはおそらくファラデーの責任ではないはずです。

@chrismoあなたは私のヒーローです。 その研究をしてくれてありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

yusefu picture yusefu  ·  3コメント

t3hk0d3 picture t3hk0d3  ·  3コメント

ioquatix picture ioquatix  ·  4コメント

aleksb86 picture aleksb86  ·  3コメント

Lewiscowles1986 picture Lewiscowles1986  ·  4コメント