لماذا أحصل على هذا الخطأ عندما أحاول طباعة شيء في المعجون؟
سؤال
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 38: ordinal not in range(128)
وأنا تحميل موقع على شبكة الانترنت ومن ثم طباعة محتوياته ... بسيطة. هل يجب علي صياغته بطريقة أو بأخرى؟
المحلول
وحاول UTF-8 البداية. الموقع الذي قد يكون تحميل محارف مختلفة من ANSI وتلك الأحرف الزائدة لا يمكن أن تكون مطبوعة على وحدة التحكم.
وهكذا في المكان الذي تفعله print text
لا print text.encode('utf-8')
بدلا من ذلك.
نصائح أخرى
تأكد من لديك المعجون تهيئتها لقبول البيانات UTF-8 المشفرة.
وprint
ing الأشياء إلى الإخراج القياسي يمكن أن يكون مشكلة، لأن بيثون في كثير من الأحيان لا يعرف ما ترميز الأحرف النظام يستخدم. في مواجهة هذا بايثون 2 يفترض معظم اختيار المحافظين، ASCII الولايات المتحدة. وذلك عند محاولة طباعة سلسلة يحتوي على أحرف التي ليست في ASCII، مثل U + 2019 الذكية ’
الاقتباس، فهو يوفر لك هذا الخطأ.
في بيثون 3 محارف تخمين الافتراضي لsys.stdout.encoding
هو UTF-8. إذا كنت متأكدا من أن الإخراج القياسي الخاص بك (. أي المعجون في قضيتك) يجب أن يقبل UTF-8، ثم نعم يمكنك تشفير صراحة:
print content.encode('UTF-8')