Faraday: response.body هو ASCII-8BIT عندما يكون نوع المحتوى هو text / xml ؛ محارف = utf-8

تم إنشاؤها على ١٦ أبريل ٢٠١٢  ·  9تعليقات  ·  مصدر: lostisland/faraday

في المرة الأولى التي أستخدم فيها 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 .

لم أتمكن من العثور على طريقة لإجبار faraday على تقديم response.body في UTF-8.

ما هو الحل المفضل لهذا؟

bug

التعليق الأكثر فائدة

الحل الذي استخدمته هو:

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

يهودا لديه أطروحة حول المشكلة هنا .

ال 9 كومينتر

فقط واجهت نفس المشكلة. أيه أفكار؟

الحل الذي استخدمته هو:

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

يهودا لديه أطروحة حول المشكلة هنا .

أنا متأكد تمامًا من أن فاراداي يمرر جسم الاستجابة من المحول الأساسي . لست متأكدًا من أنني أريد رفع الأخطاء أو إجراء تحويلات ضائعة للبيانات في فاراداي. يمكن القيام بذلك في برنامج وسيط مخصص إذا كنت في حاجة إليه حقًا.

عادل بما يكفي. إذا كانت المشكلة في مكان آخر ، كما تظهر ، أعتقد أنه سيتم تنظيفها في الوقت المناسب. إنه ليس سدادة عرض بالنسبة لي.

يتم الإغلاق لأنه ليس خطأ مع فاراداي.

لست متأكدًا من أن المحول الأساسي - على الأقل net / http - يقوم بأي تحويل ترميز. يمكنك تعيين Ruby's Encoding.default_external إلى شيء مثل "US-ASCII" ، ثم الوصول إلى نقطة نهاية مع Content-Type = '...؛ charset = utf-8 '... net / http سيحلل سلسلة الأحرف ويجعلها متاحة ، لكنه لا يفعل شيئًا لتشفير سلسلة النص الأساسي. ربما يجب أن يكون net / http مسؤولاً عن ذلك ، ولكن إذا لم يكن كذلك ، يمكن أن تتفجر برمجية ParseJson الوسيطة (على سبيل المثال).

أجر المزيد من البحث حول هذا الموضوع - بعض المحولات الأساسية تتعامل مع مجموعة أحرف نوع المحتوى ، والبعض الآخر لا:

طلب EM-HTTP يفعل. [ ارتكاب ].
الراعي يفعل. [ الالتزام ].
HTTPClient [[الالتزام] (https://github.com/nahi/httpclient/commit/e5efea5afb3b5cf6ead3a131644dee71be1ee5e9)] [[المشكلة] (https://github.com/nahi/httpclient/issues/26)].
لا يبدو أن Typhoeus و Excon (و net / http).

أعتقد أن أفضل ما يمكن فعله هو تقديم برمجيات وسيطة اختيارية للمحولات التي لا تحاول ، لكن ، نعم ، أوافق ، ربما لا ينبغي أن تكون هذه مسؤولية فاراداي.

@ كريزمو أنت بطلي. شكرا للقيام بهذا البحث!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات