سؤال

أنا جلب صفحة ويب (http://autoweek.com.) ومحاولة معالجة ذلك ولكن الحصول على خطأ الترميز. Autoweek تعلن "ISO-8859-1" ترميز ولديه كلمة "Nürburgring" (U مع Umlaut)

أنا افعل:

# -*- encoding: utf-8 -*-
import urllib
webpage = urllib.urlopen(feed.crawl_url).read()
webpage.decode("utf-8")

يعطيني الخطأ التالي:

'utf8' codec can't decode bytes in position 7768-7773: unsupported Unicode code range"

إذا قمت بالتجاوز. Devide Step والقيام ببعض التحليل باستخدام LXML Library، فإنه يثير خطأ عندما أقوم بإنقاذ عنوان المحور إلى قاعدة البيانات:

'utf8' codec can't decode bytes in position 45-50: unsupported Unicode code range

تحتوي قاعدة البيانات الخاصة بي على مجموعة الأحرف UTF8 و Collation UTF-General-CI

اعداداتي:
جانغو
بيثون 2.4.3.
MySQL 5.0.22.
Mysql-Python 1.2.1
mod_python 3.2.8.

هل كانت مفيدة؟

المحلول

Autoweek.com. يبدو مشوشا حول الترميز الخاص. وهي تعلن تعريفات المشاريع المتضاربة:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

و لاحقا...

<meta charset=iso-8859-1"/>.

ISO-8859-1 هو واحد الصحيح لأن هذا يتم إرجاعه في الرأس من خادم الويب ومن قبل .info() الطريقة (وترمز في الواقع)، ولكن هذا يدل على أنه لا يمكنك بالضرورة الاعتماد على إعلان نوع المحتوى في صفحات الويب. يجب عليك اتباع الطريقة التي وصفها Lavinio.

نصائح أخرى

إذا كان webpage تعلن ترميز iso-8859-1, ، لا يمكنك القيام به فقط webpage.decode("iso-8859-1")?

في تلك النقطة، webpage فك شفرة التطبيق الخاص بك. عندما يتم كتابته في قاعدة البيانات، يجب أن يتعامل التعيين هناك من ترميز Char-To-UTF8.

للحصول على الترميز الصحيح، إما أن تخبر خادم الويب الذي تقبله فقط، كما يقول UTF-8، وهذا ما ستحصل عليه دائما (نأمل) دائما، لأنه فقط حول الجميع يقرأ UTF-8 (أو يمكنك تجربته مع ISO- 8859-1) أو استخدم .info لتفقد اسم ترميز الدفق عاد.

يرى Urllib2 - الدليل المفقود و مرجع سريع لرؤوس HTTP للتفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top