البيانات وجداول البيانات · CSV منظف
كيف يرتبك UTF-8 وWindows-1252: إصلاح تصدير Mojibake CSV
· كيف يعمل
ملف CSV ترميز تنظيف البيانات
عندما يتحول "José" إلى "José"، تكون البايتات جيدة ويكون التفسير خاطئًا. يشرح هذا المنشور كيفية تصادم التشفيرين الأكثر شيوعًا، وكيفية التعرف على الأعراض، وكيفية إصلاحهما من خلال إعادة فك التشفير.
تحولت الأسماء المميزة والاقتباسات المتعرجة إلى مجموعة من الرموز - تُقرأ أنماط الحكاية لملف UTF-8 كـ Windows-1252، والعكس
لا يعد اسم العميل الذي يصبح معينات بديلة بعد التحميل دليلاً على أن CSV اكتشف المنظف صفحة الرموز القديمة الخاطئة. يقول التكوين عكس ذلك: يتم فهم UTF-8 فقط، ويتم قراءة ملف Windows-1252 أو Shift-JIS كـ UTF-8. لذلك يمكن بالفعل استبدال تسلسلات البايت غير الصالحة قبل أن يرى المحلل اللغوي CSV الأحرف.
ركز المخطط التفصيلي على mojibake المألوف مثل José، لكن مسار القراءة في المتصفح يستخدم `File.text()` ولا يوفر محدد ترميز. هذه المقالة تصحح هذا الوعد. يتمثل العَرَض القابل للتنفيذ داخل هذه الأداة في استبدال الأحرف أو النص التالف، مع الاحتفاظ بوحدات بايت الملف الأصلية لاستردادها في مكان آخر.
يصل الملف غير UTF-8 إلى هذه الأداة كأحرف بديلة، وليس كنمط mojibake تم التحقق منه
الملف المحدد هو بايت على القرص، بينما يعمل المحلل اللغوي على سلسلة JavaScript. يحدد التشفير التعيين بين تلك الطبقات. CSV يسمي بناء الجملة الفواصل والاقتباسات وحدود التسجيل ولكنه لا يحمل أي إعلان موثوق على القرص يخبر `File.text()` بالتعيين القديم الذي أنشأ كل بايت غير ASCII.
بمجرد أن يؤدي فك التشفير إلى إنتاج أحرف بديلة U+FFFD، تتلقى عمليات CSV اللاحقة تلك العناصر النائبة كنص عادي. لا يمكن للقص أو التصدير استنتاج تسلسل البايت الأصلي أو الحرف الذي ينتمي إليه. وهذا هو السبب في أن المصدر الذي لم يتم لمسه أكثر أهمية من قائمة البحث والاستبدال المجمعة من الشاشة التالفة.
المشتبه بهما المعتادان — تسلسلات البايتات المتعددة لـ UTF-8 وWindows-1252 والبايتات المفردة، ولماذا ينتجان بيانات غير صحيحة يمكن التنبؤ بها عند التبديل
يمثل UTF-8 أحرفًا غير ASCII ذات تسلسلات متعددة البايت. يقوم Windows-1252 بتعيين العديد من الأحرف الغربية لقيم البايت الفردية. يمكن أن تفشل قراءة اتفاقية واحدة تحت أخرى أو تنشئ نصًا مضللاً، لكن هذا المسار لا يختبر وحدات فك التشفير البديلة، أو يسجل لغة معقولة أو يقدم تحديد Windows-1252.
سلوك المحلل اللغوي الوحيد الخاص بالتشفير هو إزالة علامة ترتيب البايت U+FEFF UTF-8 البادئة بعد فك تشفير النص. يمنع ذلك العلامة من الانضمام إلى الرأس الأول. إنه ليس اكتشافًا عامًا للتشفير ولا يوفر أي دعم لـ Shift-JIS، UTF-16 أو صفحات التعليمات البرمجية الإقليمية التي لم يتم ذكرها في أي مكان في التنفيذ.
يقبل ToolAcre نص UTF-8 ولا يقارن بين Windows-1252 المرشحين
تشير الأحرف البديلة إلى أن وحدة فك ترميز النص لم تتمكن من تعيين بعض بايتات الإدخال ضمن التفسير المختار. ربما تم إدراج علامات الاستفهام من خلال عملية تصدير سابقة بفقدان البيانات، وفي هذه الحالة قد يكون الحرف الأصلي غير متاح بالفعل. يمكن أن يظهر تسلسل يمكن التعرف عليه في مسارات عمل أخرى، لكن هذه الصفحة لا تقوم بتشخيص تاريخه.
لا تقرر ترميز المصدر من لقب واحد فقط. تحقق من إعدادات تطبيق التصدير ومصدر الملف وأداة فحص البايت التي تترك المصدر دون تغيير. تتعلق تحذيرات صف المنظف بإغلاق الاقتباس وعرض العمود؛ فهي ليست دليلاً على صحة ترميز الأحرف.
إعادة فك التشفير، وليس البحث والاستبدال - لماذا يكمن الحل في قراءة البايتات بالتشفير الصحيح وكتابة UTF-8، بدلاً من تصحيح الأحرف واحداً تلو الآخر
الإصلاح الموثوق هو العودة إلى البايتات الأصلية وفك تشفيرها مرة واحدة باستخدام ترميز المصدر الموثق، ثم كتابة UTF-8. يجب أن تتم هذه العملية قبل الفتح من خلال مسار نصي UTF-8 فقط. يمكن أن يؤدي استبدال الأجزاء المرئية من البيانات المهملة بعد فك التشفير إلى إتلاف الأحداث المشروعة ولا يمكن التمييز بين العديد من الأحرف الأصلية التي انهارت إلى عنصر نائب واحد.
CSV لا يتمتع المنظف بالتحكم في إعادة فك التشفير على مستوى البايت، لذلك لا يمكنه إجراء التحويل الموعود للمخطط التفصيلي. استخدم طريقة تحويل موثوقة تعتمد على المصدر، وقارن الأسماء التمثيلية مع النظام المصدر، ثم أحضر النتيجة UTF-8 هنا للمحددات والاقتباسات والمسافات البيضاء والعمل المكرر.
الاسترداد من البايتات الأصلية خارج هذه الأداة؛ لا يمكن لاستبدال الأحرف هنا استعادتها
للحصول على عرض توضيحي آمن، أنشئ ملفًا صغيرًا مشفرًا قديمًا يحتوي على اسم مميز واحد واحتفظ بنسخة سداسية عشرية. قم بتحميله في الأداة ولاحظ ظهور الأحرف البديلة. تحدد هذه الملاحظة الحد UTF-8؛ فإنه لا يقوم بتأسيس صفحة الرموز الأصلية لمجرد أن الاسم المتوقع معروف.
قم بعد ذلك بتحويل وحدات البايت التي لم يتم لمسها باستخدام وحدة فك ترميز محددة بوضوح خارج ToolAcre، وحفظ UTF-8، وتحميل تلك النتيجة. يجب أن يصل الاسم الآن كما هو بينما يتعامل المحلل اللغوي CSV مع الفواصل بشكل طبيعي. إن مقارنة هذين المسارين تعلمنا الدرس الصحيح دون الادعاء بأن المنظف قام بعملية الاسترداد بنفسه.
مثال عملي: قم بتوضيح حدود UTF-8 دون المطالبة بإصلاح غير مدعوم
قد يتطلب الملف المزدوج التشفير إعادة بناء تحويل سابق، وقد تكون البيانات المحفوظة بالفعل بعلامات استفهام حرفية غير قابلة للاسترداد بدون مصدر آخر. لا تصف هذه المقالة عكسًا عالميًا لأن التنفيذ لا يحتوي على سجل تشفير أو وظيفة استرداد للحفاظ على البايت.
كما أنه يتجنب المطالبة بدعم UTF-16، أو ترميزات شرق آسيا أو نماذج التطبيع. إذا كانت هذه الأمور مهمة، فاختر محولًا يقوم بتسميتها واختبارها. يُثبت التحليل الناجح CSV فقط أن آلة الحالة المحددة وجدت الصفوف؛ لا يذكر شيئًا عما إذا كان فك تشفير الأحرف قبل تلك المرحلة صحيحًا أم لا.
قم بإصلاح التفسير مرة واحدة - كيف يقوم إصلاح تشفير ToolAcre CSV بإعادة فك تشفير التصدير على جهازك وإعادة تشفيره
يمكن لـ ToolAcre إزالة البادئة UTF-8 BOM وإجراء تسلسل للسلسلة الناتجة كـ UTF-8 CSV من خلال مسار تنزيل المتصفح. لا يمكنه تحويل البايتات القديمة العشوائية إلى Unicode صحيح لأن تلك البايتات قد تجاوزت بالفعل حدود قراءة النص الثابتة للمتصفح دون وحدة فك ترميز محددة من قبل المستخدم.
تعامل مع علامات الاستبدال كإشارة توقف. احتفظ بالمصدر، وحدد ترميزه من المنتج، وقم بالتحويل مرة واحدة باستخدام أداة مناسبة للتعرف على البايت، وتحقق من الأسماء المهمة. عندها فقط استخدم CSV المنظف للوظائف الهيكلية التي يعد بها تكوينه بالفعل.