Python 3.15 تجعل UTF-8 الترميز الافتراضي وتنهي مشكلة النص العربي المشوّه على Windows
الكود نفسه الذي كان يعمل على جهاز ويفسد البيانات العربية بصمت على جهاز آخر يصبح سلوكه واحدًا في كل مكان، بعد قرار ظل مؤجلًا سنوات دفع ثمنه أصحاب الحروف غير اللاتينية.
صدر Python 3.15.0rc1 في 4 أغسطس 2026، ومعه تطبيق PEP 686 الذي يجعل UTF-8 mode هو الوضع الافتراضي. أي أن ترميز النصوص الافتراضي أصبح UTF-8 بدلًا من ترميز الـ locale الخاص بنظام التشغيل، في الملفات والـ stdio والـ pipes. ومن المتوقع صدور الإصدار النهائي في أكتوبر 2026.
والمشكلة التي يعالجها مألوفة لمطوري العربية على Windows. فعند كتابة open(“file.txt”) دون تحديد ترميز، كانت Python تسأل نظام التشغيل عن ترميزه. وعلى Linux وmacOS يكون الجواب UTF-8، فلا تظهر مشكلة. أما على Windows بواجهة عربية فكان الجواب cp1256، وهو ترميز قديم مخصص للعربية يمثّل كل حرف فيه بايت واحد.
فالملف المكتوب أصلًا بـ UTF-8، حيث يشغل الحرف العربي بايتين، كان يُقرأ على أنه cp1256، فينقسم كل حرف إلى رمزين بلا معنى. والأسوأ أن ذلك لا يُطلق أي خطأ: يعمل الكود، وتُخزَّن البيانات مشوهة، وتظهر المشكلة لاحقًا في مكان آخر تمامًا. وهذا أيضًا ما يجعل الكود نفسه يعمل على جهاز ويتعطل على جهاز زميل دون تغيير سطر واحد.
ومن الإصدار 3.15 يصبح الترميز UTF-8 دائمًا، أيًا كانت لغة الجهاز.
وقد يتأثر بالتغيير أي كود قديم يعتمد على قراءة الملفات بالترميز المحلي. ويمكن استعادة السلوك السابق عبر PYTHONUTF8=0 أو الخيار -X utf8=0، وأضيفت الدالة locale.getencoding() للتطبيقات التي تحتاج فعلًا إلى الترميز المحلي.
وقد نوقش هذا القرار سنوات قبل أن يُعتمد، وكان أكثر من تحمّل كلفة تأخيره هم من يكتبون بحروف غير لاتينية.
المصادر
من عدد الأربعاء 29 صفر - 12 أغسطس