برمجياتقراءة دقيقتين

إصدار Python 3.15 المستقر يجعل UTF-8 الترميز الافتراضي، والملفات العربية القديمة تتأثر

المغزى

المغزى: الخطأ الذي كان يظهر على جهاز واحد فقط لم يعد له سبب، لكن البيانات العربية القديمة المحفوظة بترميز آخر صارت تحتاج ترميزها مكتوبًا صراحة في الكود.

صدر Python 3.15.0 في 9 أكتوبر 2026 إصدارًا مستقرًا، بعد أشهر من إعلان جعل UTF-8 الترميز الافتراضي. والتغيير الآن في يد كل من يرقّي.

وبحسب ملاحظات الإصدار، المأخوذة من PEP 686، تستخدم اللغة UTF-8 ترميزًا افتراضيًا مستقلًا عن إعدادات النظام. فسطر مثل open('file.txt') بلا وسيط encoding يقرأ الملف بـ UTF-8 دائمًا. ولا ينطبق ذلك إلا حين لا يُحدَّد الترميز.

وقبل هذا الإصدار كان الترميز الافتراضي يأتي من إعدادات النظام، أي الـ locale. وعلى نسخة Windows عربية كان ذلك غالبًا cp1256، وهو ترميز Windows القديم للعربية. فالملف العربي المحفوظ بـ UTF-8 كان يُقرأ بترميز آخر، فيظهر النص حروفًا مكسورة على جهاز دون آخر. ولهذا اعتاد المطورون كتابة encoding='utf-8' بأيديهم في كل مرة.

لكن للتغيير وجهًا آخر. فالكود الذي كان يقرأ ملفات قديمة محفوظة بـ cp1256 دون تحديد الترميز، معتمدًا على إعدادات Windows العربية، صار يقرؤها الآن بـ UTF-8. والنتيجة إما خطأ UnicodeDecodeError، وإما نص خاطئ دون أي تحذير.

ولا يتطلب ذلك تعطيل الميزة. فالحل المذكور في التوثيق أن يُكتب الترميز صراحة: encoding='cp1256' للملف القديم، أو encoding='locale' لاستخدام ترميز النظام، وهو خيار مدعوم منذ Python 3.10. ولمن يحتاج السلوك القديم مؤقتًا، يمكن إلغاء الوضع بالمتغير PYTHONUTF8=0 أو بالخيار -X utf8=0.

ويصبح الأثر الأوضح على الأنظمة التي تحمل بيانات عربية قديمة: أرشيفات نصية، وملفات CSV صُدّرت من برامج Windows قديمة، وسكربتات كُتبت قبل سنوات. فهذه صارت تحتاج ترميزها مكتوبًا لا مفترضًا. ويوفر Python تحذيرًا اختياريًا للترميز يكشف المواضع التي تفتح ملفات دون تحديده، قبل الترقية.

المصادر

  1. صفحة إصدار Python 3.15.0 الرسمية
  2. ملاحظات الجديد في Python 3.15
  3. نص PEP 686
  4. توثيق تحذير الترميز الاختياري

من عدد السبت 29 ربيع الآخر - 10 أكتوبر

أخبار ذات صلة

برمجيات

خطة إدخال Rust إلى CPython تبدأ بوحدة zlib في Python 3.16 ولا تصبح إلزامية قبل 2029

القرار ليس اختيار لغة أفضل، بل مقايضة بين أمان الذاكرة وتنوع المترجمات التي تُبنى بها Python، وكلاهما يكشف أخطاء بطريقة مختلفة، وأكثر من يتأثر بها من يبني امتدادات C أو يعمل على منصات غير شائعة.

23 ربيع الآخر - 4 أكتوبر

أخبار السبت 29 ربيع الآخر - 10 أكتوبر