data · 6 دقائق قراءة

لماذا يبدأ ملف CSV عندك بـ

ثلاثة بايتات يكتبها برنامج عمدًا ويرسمها آخر زبالة. لا شيء مكسور — لكنها ستكسر بحثًا عن عمود في صمت.

تفتح ملف CSV فيكون أول شيء فيه ، جالسًا أمام اسم عمود كان يُفترض أن يكون id. أو تستورده، فإذا سكربت عمل سنةً كاملة يعجز فجأةً عن إيجاد ذلك العمود إطلاقًا.

ما هذا الـ في أول ملف CSV

علامة ترتيب بايتات UTF-8، مقروءةً بالطريقة الخطأ

ثلاثة بايتات — EF BB BF — تعلّم الملف بأنه UTF-8. القارئ الذي يفهم UTF-8 يرى محرفًا واحدًا غير مرئي فلا يعرض شيئًا. أما القارئ الذي يفترض بايتًا لكل محرف فيرى ثلاثة، ويرسمها . الملف سليم؛ الجدول المستعمل لقراءته هو الخطأ.

قراءة بـUTF-8ثلاثة بايتات، محرف واحدU+FEFFلا يُرسم شيءالبايتاتEFBBBFقراءة بـWindows-1252بايت واحد، محرف واحد
البايتات هنا ناتجة عن تمرير U+FEFF عبر TextEncoder، والصف السفلي عن قراءة كل بايت منها وحده — وهما العمليتان نفساهما اللتان ينفّذهما محرّرك وجدولك. لا شيء في الملف مكسور. أحدهما يستعمل الجدول الخطأ.

لماذا يكتبها أحد عمدًا

يفتح Excel على ويندوز ملف CSV المنقور نقرًا مزدوجًا بصفحة رموز النظام لا بترميز UTF-8 — إلا أن يجد علامة ترتيب البايتات في المقدّمة، فتخبره بغير ذلك. بلا العلامة، يظهر ملف مملوء بأسماء عربية أو ذات علامات شاشةً من Ø وÃ. معها يفتح الملف نفسه صحيحًا بنقرة مزدوجة.

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

العطل الذي يكلّف مالًا

تلتصق باسم عمودك الأول. المحلّل الذي لا ينزع العلامة يعيد عنوانًا هو <غير مرئي>id بدل id. على الشاشة يُقرأ العمود id. في بحث أو وصل أو إعداد يسمّي العمود، لا يطابق شيئًا.

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

أبقِها أو انزعها

لا جواب صحيحًا للجميع، بل سؤال عمّا سيقرأ الملف بعدها.

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

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

حذفها لا يغيّر شيئًا آخر. هي ثلاثة بايتات في البداية تمامًا؛ وكل بايت آخر في الملف لا يُمسّ. مصلح الترميز يقرأ الملف في متصفّحك، ومنظّف CSV يريك العنوان بعد التحليل لترى هل ما زالت العلامة راكبةً عليه.

لماذا لـUTF-8 واحدة أصلًا

إنها موروثة. في UTF-16 تؤدّي علامة ترتيب البايتات عملًا حقيقيًّا: تخبرك هل يصل كل زوج بايتات بطرفه الكبير أو الصغير أولًا، وذلك ملتبس فعلًا. UTF-8 بلا هذا الالتباس — ترتيب البايتات محدَّد بالترميز — فلا تحمل العلامة معلومةً عن الترتيب.

ما بقي هو التوقيع. ثلاثة بايتات في المقدّمة تقول هذا UTF-8، وهو ما يوصي معيار يونيكود بعدمه وما زالت برمجيات كثيرة تحتاجه. لمزيد عمّا يفعله الترميز نفسه، يغطّي شرح UTF-8 الطبقة التي تحت هذه.

النسخة القصيرة

 توقيع UTF-8 مرئيًّا عبر القارئ الخطأ. أبقِه إن كان إنسان على ويندوز سيفتح الملف؛ وانزعه إن كانت آلة ستفتحه. إن بدأ بحث عن عمود يفشل بلا سبب، ففتّش في العنوان الأول عن محرف لا تستطيع رؤيته.

أسئلة

ما هذا الـ في أول ملف CSV عندي؟

هي علامة ترتيب بايتات UTF-8 — ثلاثة بايتات، EF BB BF — يرسمها برنامج يقرأ الملف بايتًا بايتًا بدل أن يقرأه UTF-8. في UTF-8 هذه البايتات الثلاثة محرف واحد غير مرئي. قراءتها بترميز Windows-1252 تجعلها المحارف الثلاثة المنفصلة ï و» و¿. ملفك ليس تالفًا، ولم يُضف شيء ممّن أرسله إليك وراء تلك البايتات الثلاثة المقصودة.

هل أحذف علامة ترتيب البايتات؟

يتوقّف ذلك كلّه على ما سيقرأ الملف بعدها. Excel على ويندوز يستعملها ليتعرّف على UTF-8، وسيشوّه النص العربي وذا العلامات بدونها، فهي تستحقّ مكانها في ملف مقصده نقرة مزدوجة. أما السكربت أو استيراد قاعدة بيانات أو واجهة برمجية فيريدها ذاهبةً عادةً، لأنها تصل ملتصقةً في صمت باسم العمود الأول فتحوّل id إلى id، وهذا لا يطابق شيئًا.

لماذا تظهر في عنوان عمودي الأول؟

لأن المحلّل الذي لا ينزعها يعاملها جزءًا من الحقل الأول. يبدو العنوان id على الشاشة وهو في الحقيقة محرف غير مرئي يتبعه id، فيفشل البحث عن العمود والملف يبدو طبيعيًّا تمامًا. هذه أغلى صور المشكلة، لأن لا شيء يخطئ — الوصل يعيد لا شيء وحسب، والجميع يلوم البيانات.

هل علامة ترتيب البايتات لازمة لـUTF-8؟

لا، ومعيار يونيكود يوصي بعدمها لـUTF-8. UTF-8 بلا ترتيب بايتات يُعلَم — الاسم موروث من UTF-16، حيث كانت العلامة تخبرك فعلًا أي طرف يأتي أولًا. في UTF-8 لم تبقَ إلا توقيعًا يقول «هذا الملف UTF-8»، وهو مفيد لأن برمجيات كثيرة ما زالت تخمّن.

لماذا يحتاجها Excel وحده؟

يفتح Excel على ويندوز ملف CSV المنقور نقرًا مزدوجًا بصفحة رموز النظام لا بترميز UTF-8، إلا أن يجد علامة ترتيب بايتات تخبره بغير ذلك. ذلك القرار وحده هو سبب كتابة العلامة إلى اليوم سنة 2026. معالج الاستيراد في Excel نفسه يتيح لك اختيار الترميز ولا يحتاج علامة إطلاقًا — طريق النقر المزدوج وحده هو الذي يخمّن.

ماذا يعني أو  في محرّر نصوص؟

كلاهما البايتات الثلاثة نفسها معروضةً بمحرّر لا يقرأ UTF-8. هي الصورة الأقدم التي تستعملها بعض الطرفيات والمحرّرات؛ و هي ما تحصل عليه من قراءة بترميز Windows-1252. رؤية أيّهما تعني أن في الملف علامة ترتيب بايتات وأن الشيء الذي يعرضه لا يدري ذلك.

كيف أحذفها دون أن أكسر بقيّة الملف؟

أعد حفظ الملف بترميز UTF-8 بلا علامة ترتيب بايتات، أو اقرأه وأعد كتابته بأداة تنزعها. حذف المحارف باليد في محرّر لا ينفع إلا إن كان المحرّر يعرضها، والمحرّرات المهمّة هنا لا تعرضها عادةً. لا شيء آخر في الملف يتغيّر — العلامة ثلاثة بايتات في المقدّمة تمامًا ولا تمسّ أي بايت آخر.

هل يُرفع ملفي لإصلاحه؟

لا. أدوات هذا الموقع تقرأ الملف في متصفّحك ولا يصل إلى خادم إطلاقًا. هذا يهمّ هنا أكثر من المعتاد: ملف CSV فيه مشكلة ترميز يكون في الغالب قائمة عملاء أو تصديرًا أو تقريرًا، وهذه أقلّ الملفات التي يرضى الناس بتسليمها إلى غريب لينزع ثلاثة بايتات من مقدّمتها.

أدوات من هذا الدليل

المزيد من أدوات البيانات — كلّها تعمل في متصفّحك، ولا واحدة منها ترفع ملفًّا.