Ich benutze Faraday zum ersten Mal, also mache ich vielleicht Dinge falsch, aber die response.body
Codierung im Folgenden ist 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
In 1.9.2 führt dies dazu, dass REXML ein Encoding::CompatibilityError
ausgibt.
Ich konnte keine Möglichkeit finden, Faraday zu zwingen, response.body
in UTF-8 bereitzustellen.
Was ist die bevorzugte Lösung dafür?
Habe gerade das gleiche Problem festgestellt. Irgendwelche Ideen?
Von mir verwendete Problemumgehung ist:
response.body.force_encoding('utf-8')
Yahuda hat eine Dissertation über das Problem hier .
Ich bin mir ziemlich sicher, dass Faraday nur den Antworttext des zugrunde liegenden Adapters weitergibt . Ich bin mir nicht sicher, ob ich Fehler auslösen oder verlustbehaftete Konvertierungen der Daten in Faraday durchführen möchte. Dies kann in einer benutzerdefinierten Middleware erfolgen, wenn Sie sie wirklich benötigen.
Meinetwegen. Wenn das Problem, wie es scheint, woanders liegt, denke ich, dass es rechtzeitig behoben wird. Es ist kein Showstopper für mich.
Schließen, weil es bei Faraday kein Fehler ist.
Ich bin mir nicht sicher, ob der zugrunde liegende Adapter - zumindest net/http - eine Codierungstransformation durchführt. Sie können Rubys Encoding.default_external auf etwas wie 'US-ASCII' setzen und dann mit Content-Type = '...; charset=utf-8' ... net/http parst den Zeichensatz und macht ihn verfügbar, ändert aber nichts an der Kodierung des Textkörpers. Vielleicht sollte net/http dafür verantwortlich sein, aber wenn dies nicht der Fall ist, kann die ParseJson-Middleware (zum Beispiel) explodieren.
Habe dazu noch etwas recherchiert - einige der zugrunde liegenden Adapter verarbeiten den Content-Type-Zeichensatz, andere nicht:
EM-HTTP-Request tut es. [ verpflichten ].
Patron tut. [ verpflichten ].
HTTPClient macht [[commit](https://github.com/nahi/httpclient/commit/e5efea5afb3b5cf6ead3a131644dee71be1ee5e9)] [[issue](https://github.com/nahi/httpclient/issues/26)].
Typhoeus und Excon (und net/http) erscheinen nicht.
Ich denke, das Schönste wäre, vielleicht eine optionale Middleware für Adapter anzubieten, die es nicht versuchen, aber ja, ich stimme zu, dies sollte wahrscheinlich nicht in der Verantwortung von Faraday liegen.
versuche es mit https://github.com/qhwa/string_utf8
@chrismo du bist mein Held. Danke für diese Recherche!
Hilfreichster Kommentar
Von mir verwendete Problemumgehung ist:
Yahuda hat eine Dissertation über das Problem hier .