سؤال

أحاول تنظيف جميع أتش تي أم أل خارج السلسلة حتى يكون الإخراج النهائي ملف نصي. لدي بعض الأبحاث حول "المحولات" المختلفة التي بدأت في الاعتماد على إنشاء قاموس الخاص بي للحصول على الكيانات والرموز وتشغيل استبدال على السلسلة. أنا أفكر في ذلك لأنني أريد أتمتة العملية وهناك الكثير من التباين في جودة HTML الأساسي. لبدء مقارنة سرعة حلاي وأحد البدائل على سبيل المثال نبا ما قررت اختبار استبدال xa0 باستخدام طريقة السلسلة استبدال. أحصل على

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

الخط الفعلي من الكود كان

s=unicodestring.replace('\xa0','')

على أي حال - قررت أنني بحاجة إلى مقدمة ذلك مع R حتى ركضت هذا الخط من التعليمات البرمجية:

s=unicodestring.replace(r'\xa0','')

يعمل دون خطأ ولكنني عندما أنظر إلى شريحة من S، أرى أن XAO لا يزال هناك

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

المحلول

قد تكون يجب أن تفعل

s=unicodestring.replace(u'\xa0',u'')

نصائح أخرى

s=unicodestring.replace('\xa0','')

.. في محاولة لإنشاء حرف Unicode \xa0, ، والتي ليست صالحة في Sctring ASCII (نوع السلسلة الافتراضية في Python حتى الإصدار 3.x)

السبب r'\xa0' لم يكن خطأ لأنه في سلسلة خام، تسلسل الهروب ليس لها تأثير. بدلا من محاولة الترميز \xa0 في حرف Unicode، رأت السلسلة ك "عكسية حرفية"، "حرفي X" وهلم جرا ..

ما يلي هي نفسها:

>>> r'\xa0'
'\\xa0'
>>> '\\xa0'
'\\xa0'

هذا شيء مصمم في Python V3، حيث أن نوع السلسلة الافتراضي هو Unicode، حتى تتمكن من القيام به فقط ..

>>> '\xa0'
'\xa0'

أحاول تنظيف جميع أتش تي أم أل خارج السلسلة حتى يكون الإخراج النهائي ملف نصي

أود أن أوصي بشدة جميلة لهذا. كتابة أداة تنظيف HTML صعبة (تعطى مدى رهيبة معظم أتش تي أم أل)، والجماعة الجميلة تقوم بعمل رائع على كلا من تحليل HTML، والتعامل مع Unicode ..

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>")
>>> print soup.prettify()
<html>
 <body>
  <h1>
   Hi
  </h1>
 </body>
</html>

انظر الى برامج الترميز المكتبة القياسية، وتحديدا تشفير و فك تشفير الأساليب المقدمة في فئة قاعدة الترميز.

هناك أيضا مقال جيد هنا التي تضع كل شيء معا.

بدلا من ذلك، من الأفضل استخدام ميزات Python القياسية.

علي سبيل المثال:

string = unicode('Hello, \xa0World', 'utf-8', 'replace')

أو

string = unicode('Hello, \xa0World', 'utf-8', 'ignore')

أين replace سوف يستبدل \xa0 ل \\xa0.

لكن اذا \xa0 ليس حقا ذا معنى لك وتريد إزالته ثم استخدم ignore.

مجرد ملاحظة فيما يتعلق بتنظيف HTML. من الصعب جدا جدا

<
body
>

هي طريقة صالحة لكتابة HTML. فقط لمعلوماتك.

يمكنك تحويله إلى Unicode بهذه الطريقة:

print u'Hello, \xa0World'  # print Hello,  World
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top