جعل الثعبان تحل محل حرف من الامم المتحدة وencodable مع سلسلة افتراضيا

StackOverflow https://stackoverflow.com/questions/1933184

  •  20-09-2019
  •  | 
  •  

سؤال

وأريد أن الثعبان تجاهل حرف لا يمكن ترميز، عن طريق استبدال ببساطة لهم "<could not encode>" السلسلة.

ومنها مثلا، على افتراض الترميز الافتراضي هو أسكي، الأمر

'%s is the word'%'ébác'

وسوف تسفر

'<could not encode>b<could not encode>c is the word'

هل هناك أي طريقة لجعل هذا السلوك الافتراضي، عبر عن مشروعي؟

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

المحلول

str.encode الدالة تأخذ وسيطة اختيارية تحديد معالجة الأخطاء:

str.encode([encoding[, errors]])

ومن المستندات:

<اقتباس فقرة>   

عودة نسخة المشفرة من السلسلة. افتراضي الترميز هو ترميز سلسلة الافتراضي الحالي. ويمكن إعطاء أخطاء لوضع خطة معالجة الأخطاء مختلفة. الافتراضي للأخطاء هو "صارم"، وهذا يعني أن أخطاء ترميز تثير UnicodeError. القيم الأخرى الممكنة هي 'تجاهل'، 'استبدال'، 'xmlcharrefreplace'، 'backslashreplace "وأي اسم آخر مسجل عبر codecs.register_error ()، راجع المقطع فئات ترميز قاعدة. للحصول على قائمة من ترميزات الممكنة، انظر القسم ستاندرد الترميز.

في الحالة الخاصة بك، قد يكون codecs.register_error ظيفة الفائدة.

[ملاحظة حول <م> حرف سيئة ]

وبالمناسبة، لاحظ عند استخدام register_error أن عليك أن المرجح أن تجد نفسك استبدال الأحرف سيئة ليس فقط الفردية ولكن مجموعة من الشخصيات سيئة متتالية مع سلسلة الخاص بك، إلا إذا كنت تدفع الانتباه. يمكنك الحصول على مكالمة واحدة إلى معالج خطأ في سلسلة من حرف سيئة، وليس في شار.

نصائح أخرى

>>> help("".encode)
Help on built-in function encode:

encode(...)
S.encode([encoding[,errors]]) -> object

Encodes S using the codec registered for encoding. encoding defaults
to the default encoding. errors may be given to set a different error
handling scheme. Default is 'strict' meaning that encoding errors raise
a UnicodeEncodeError. **Other possible values are** 'ignore', **'replace'** and
'xmlcharrefreplace' as well as any other name registered with
codecs.register_error that is able to handle UnicodeEncodeErrors.

وهكذا، على سبيل المثال:

>>> x
'\xc3\xa9b\xc3\xa1c is the word'
>>> x.decode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
>>> x.decode("ascii", "replace")
u'\ufffd\ufffdb\ufffd\ufffdc is the word'

واضافة رد الخاصة بك لcodecs.register_error على استبدال سلسلة من اختيارك.

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