Faraday: response.body adalah ASCII-8BIT ketika Content-Type adalah teks/xml; rangkaian karakter = utf-8

Dibuat pada 16 Apr 2012  ·  9Komentar  ·  Sumber: lostisland/faraday

Pertama kali menggunakan faraday, jadi saya mungkin melakukan hal-hal yang salah, tetapi penyandian response.body berikut ini adalah 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

Di 1.9.2 ini menyebabkan REXML melempar Encoding::CompatibilityError .

Saya tidak dapat menemukan cara untuk memaksa faraday memberikan response.body di UTF-8.

Apa solusi yang disukai untuk ini?

bug

Komentar yang paling membantu

Solusi yang saya gunakan adalah:

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

Yahuda memiliki disertasi tentang masalah ini di sini .

Semua 9 komentar

Baru saja mengalami masalah yang sama. Ada ide?

Solusi yang saya gunakan adalah:

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

Yahuda memiliki disertasi tentang masalah ini di sini .

Saya cukup yakin Faraday hanya meneruskan badan respons dari adaptor yang mendasarinya . Saya tidak yakin ingin memunculkan kesalahan atau melakukan konversi lossy dari data di Faraday. Itu bisa dilakukan di middleware khusus jika Anda benar-benar membutuhkannya.

Cukup adil. Jika masalahnya ada di tempat lain, seperti yang terlihat, saya kira itu akan selesai tepat waktu. Itu bukan penghenti pertunjukan bagi saya.

Penutupan karena itu bukan bug dengan Faraday.

Saya tidak yakin adaptor yang mendasarinya - setidaknya net/http - melakukan transformasi penyandian apa pun. Anda dapat mengatur Ruby's Encoding.default_external ke sesuatu seperti 'US-ASCII', lalu tekan titik akhir dengan Content-Type = '...; charset=utf-8' ... net/http akan mengurai string charset dan membuatnya tersedia, tetapi tidak melakukan apa pun pada penyandian string tubuh. Mungkin net/http harus bertanggung jawab untuk itu, tetapi jika tidak, middleware ParseJson (misalnya) dapat meledak.

Lakukan penelitian lebih lanjut tentang ini - beberapa adaptor yang mendasari menangani rangkaian karakter Tipe-Konten, beberapa tidak:

EM-HTTP-Request tidak. [ komit ].
Pelindung tidak. [ komit ].
HTTPClient melakukan [[commit](https://github.com/nahi/httpclient/commit/e5efea5afb3b5cf6ead3a131644dee71be1ee5e9)] [[issue](https://github.com/nahi/httpclient/issues/26)].
Typhoeus dan Excon (dan net/http) tampaknya tidak.

Saya kira hal terbaik untuk dilakukan adalah menawarkan middleware opsional untuk adaptor yang tidak mencoba, tetapi, ya, saya setuju, ini mungkin bukan tanggung jawab Faraday.

@chrismo kamu adalah pahlawanku. Terima kasih telah melakukan penelitian itu!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

QuinnWilton picture QuinnWilton  ·  4Komentar

subvertallchris picture subvertallchris  ·  5Komentar

yusefu picture yusefu  ·  3Komentar

mvastola picture mvastola  ·  4Komentar

amrrbakry picture amrrbakry  ·  4Komentar