تقنية

فك UTF-8 في بايثون: هل يبقى توقيع البداية محرفًا؟

طول النص وأول محرف عند فك توقيع البداية
للبايتات EF BB BF 72. [1] [2]

قارن النص الناتج، لا مظهر الحرف وحده. [1] [2]

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

يحذف utf-8-sig توقيع البداية عند فك الترميز. [1] [2]

  • التوقيع هنا البايتات EF BB BF في البداية. [1] [2]
  • مع utf-8 يبقى محرف U+FEFF؛ مع utf-8-sig يُستهلك. [1] [2]
  • دون التوقيع، يعطي المثال r مع الخيارين. [1] [2]
  • التسلسل نفسه داخل البيانات يبقى محرفًا؛ ليس حذفًا عامًا. [1] [2]
  • اختبرنا 3.12.14 وبايتات كاملة مؤلفة في الذاكرة. [1] [2]

المثال

b=bytes.fromhex('efbbbf72')
for c in ('utf-8','utf-8-sig'):
 s=b.decode(c)
 print(len(s),ord(s[0]))

[1] [2]

المخرجات: 2 65279 ثم 1 114. [1] [2]

الأعداد نقاط يونيكود: 65279=U+FEFF و114=U+0072، أي r. الطول يعد المحارف، لا البايتات. [1] [2]

موضع التوقيع

داخل البايتات 72 EF BB BF، يعطي الخياران محرفين: r ثم U+FEFF. [1] [2]

حذف التوقيع الأول وبقاء المحرف الداخلي
الموضع يغير النتيجة. [1] [2]

أما 72 وحده فيعطي r، وطوله واحد مع الخيارين؛ التوقيع اختياري عند القراءة. [1] [2]

النطاق

هذا فك بيانات كاملة؛ لم نختبر قراءة مجزأة أو كشف ترميز مجهول أو برنامج استقبال. [1] [2]

نستعمل الترميز المعروف للمصدر. [1] [2]

المراجع

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

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