سؤال

أنا أستخدم قذيفة بيثون بهذه الطريقة:

>>> s = 'Ã'
>>> s
'\xc3'

كيف يمكنني طباعة المتغير لإظهار الحرف أ ؟؟؟ هذا هو أول وأسهل سؤال. حقا، أحصل على المحتوى من صفحة ويب له أحرف غير ASCII مثل السابق والآخرين مع تيلد مثل Á، é، í، ñ، إلخ. أيضا، أحاول تنفيذ Regex مع هذه الأحرف في تعبير نمط مقابل محتوى صفحة الويب.

كيف يمكن حل هذه المشكلة؟

هذا مثال على regex واحد:

u'<td[^>]*>\s*Definición\s*</td><td class="value"[^>]*>\s*(?P<data>[\w ,-:\.\(\)]+)\s*</td>'

إذا كنت تستخدم تطبيق Expresson يعمل بشكل جيد.

تحرير [05/26/2009 16:38]: آسف، حول تفسيري. سأحاول شرح أفضل.

يجب أن أحصل على بعض النص من الصفحة. لدي عنوان URL لهذه الصفحة ولدي Regex للحصول على هذا النص. أول شيء اعتقدت أنه كان ريجيكس خطأ. راجعته مع Expresso ويعمل بشكل جيد، لقد حصلت على النص الذي أردت. لذلك، كان الشيء الثاني الذي اعتقدت أنه هو طباعة محتوى الصفحة وكان ذلك عندما رأيت أن المحتوى لم يكن ما أراه في التعليمات البرمجية المصدرية لصفحة الويب. الاختلافات هي الأحرف غير ASCII مثل á، é، í، إلخ. الآن، لا أعرف ما يجب أن أفعله، وإذا كانت المشكلة في ترميز محتوى الصفحة أو في نص نمط Regex. واحد من Regex الذي حددته هو السابق.

السؤال Wolud Be: هل هناك أي مشكلة في استخدام Regex النص الذي يحتوي على أحرف غير ASCII ؟؟

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

المحلول

لنفترض أنك تريد طباعتها كما UTF-8. قبل بيثون 3، الأفضل هو تشفيرها على وجه التحديد

print u'Ã'.encode('utf-8')

إذا حصلت على النص خارجيا، فعليك تحديد (UTF-8) على وجه التحديد

f = open(my_file)
a = f.next().decode('utf-8') # you have a unicode line in a
print a.encode('utf-8') 

نصائح أخرى

كيف يمكنني طباعة المتغير لإظهار الحرف أ ؟؟؟
استعمال print:

>>> s = 'Ã'
>>> s
'\xc3'
>>> print s
Ã

سأستخدم ord() لمعرفة ما إذا كانت الشخصية ASCII / الخاصة:

if ord(c) > 127:
    # special character

ربما لن يعمل هذا مع ترميزات متعددة بايت مثل UTF-8. في هذه الحالة، أود أن أتحول إلى Unicode قبل الاختبار.

إذا حصلت على أحرف خاصة من صفحة ويب، يجب أن تعرف الترميز. ثم فك شفرة ذلك، انظر يونيكود howto..

تحرير: أنا بالتأكيد غير متأكد من ما هو هذا السؤال حول ... قد يكون من الجيد توضيح ذلك.

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