ملفات CSV المصدرة بها أحرف مشوهة

عند تصدير قائمة المستخدمين بتنسيق CSV، إذا كان حقل name يحتوي على أحرف غير الأحرف الأبجدية الرقمية ASCII، فستظهر الأحرف بشكل مشوه:

لقد وجدت حلين لمعالجة هذه المشكلة:

  1. إنشاء ملف XLSX جديد في Excel، واستيراد البيانات باستخدام خيار “من نص/CSV”، وضبط أصل الملف على Unicode (UTF-8).


    image

  2. استخدام Notepad++ لفتح ملف CSV، وتغيير الترميز من UTF-8 إلى UTF-8-BOM.

النتيجة:

على الرغم من فعالية هذين الحلين في معالجة العرض، إلا أنهما يعالجان المشكلة دون معالجة السبب الجذري لها.


بعد مزيد من البحث، توصلت إلى حل محتمل طويل الأمد لهذه المشكلة:

// عملية إنشاء ملف CSV، حيث يمثل 'body' صفوف البيانات و 'header' صف الرأس.
const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);

// يتطلب Excel علامة ترتيب البايت (BOM) للإشارة إلى أن الملف مرمّز بـ UTF-8.
const BOM = Buffer.from('\uFEFF');

// دمج رأس BOM مع محتوى CSV المُنشأ.
const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);

// تحويل المخزن المؤقت الناتج إلى سلسلة نصية وإرجاعه.
return bomCsv.toString();

// بمجرد تنزيل السلسلة النصية المُرجعة وفتحها باستخدام Excel، ستعرض المحتوى الصيني بشكل صحيح في جدول البيانات.

في الأساس، يتطلب Excel بيانات وصفية لتحديد ترميز ملفات CSV. قدمت Microsoft رأس BOM (علامة ترتيب البايت) لهذا الغرض. في حين أن هذا الرأس قد يتم تجاهله بواسطة برامج جداول البيانات الأخرى، إلا أنه يحمل أهمية كبيرة لبرنامج Excel. لضمان التوافق بين البرامج، يعد تضمين رأس BOM أثناء إنشاء CSV أمرًا ضروريًا.

أتساءل عما إذا كان فريقك لديه خطط لدمج هذا الحل في الإصدار القادم؟ قد يؤدي القيام بذلك إلى توسيع دعم اللغة وتقليل حدوث الأخطاء.

شكراً لاهتمامكم بهذا الأمر!

مرجع:
https://www.zhihu.com/question/21869078/answer/350728339

إعجاب واحد (1)