تقنية

iterdecode في بايثون: هل يجوز تقسيم بايتات المحرف؟

محرف موزع على جزأين
حدود المدخل. [1] [2]

حد الجزء ليس بالضرورة حد المحرف. [1] [2]

الخلاصة السريعة

نعم، يعالج الفك التدريجي انقسام المحرف بين جزأين في مثالنا. [1] [2]

  • بايتا الباء 216 و168 موزعان على جزأين. [1] [2]
  • iterdecode يحتفظ بحالة الفك بين المدخلات. [1] [2]
  • نجمع المخرجات؛ نقطة المحرف الناتج 1576. [1] [2]
  • فك الجزء الأول وحده يثير UnicodeDecodeError. [1] [2]
  • اختبرنا 3.12.14 مع strict الافتراضي؛ دون ملف أو شبكة. [1] [2]

المثال

import codecs
parts=[bytes([216]),bytes([168])]
text=''.join(codecs.iterdecode(parts,'utf-8'))
print([ord(c) for c in text])
try:
    parts[0].decode('utf-8')
except UnicodeDecodeError:
    print('incomplete')

[1] [2]

الأجزاء والمخرج

المصدر هنا يستخدم مفككًا تدريجيًا واحدًا ثم ينهي الفك عند انتهاء المدخل. المخرجان [1576] وincomplete. لا نطلب أن يعيد كل جزء محرفًا؛ لا يصدر الجزء الأول وحده نصًا في تجربتنا. [1] [2]

الفك يعيد الباء
مخرج مكتمل. [1] [2]

النهاية

إذا انتهى المدخل عند البايت الأول، يثير استكمال المولد خطأً بدل انتظار جزء غير موجود. التقسيم لا يصلح بايتات تالفة؛ المثال محرف صحيح مكتمل في جزأين. [1] [2]

المراجع

  1. Python 3.12: codecs.iterdecode
  2. CPython 3.12.14: codecs.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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