بينما يتم استيراد الرسائل الأخرى ذات الترميز غير UTF-8، مثل iso-8859-1، بشكل صحيح.
قبل أن أحاول فهم جذر المشكلة من خلال استكشاف الكود بدءًا من script/import_scripts/mbox/support/indexer.rb، هل لدى أحدكم فكرة؟ هل يمكن أن تكون المشكلة بيئية وليست في قاعدة الكود؟ هل يحدث هذا أيضًا عندما يرسل مستخدم يعمل في وضع القائمة البريدية ردًا بهذا الترميز؟
شكرًا لك على الاختبار السريع: لا أعرف كيف أفعل ذلك بنفسي هل يمكن أن يكون هناك شيء مفقود في حاوية الاستيراد؟ أود حقًا تكرار ما قمت به والاستكشاف من هناك. إذا لم أجد أي شيء، سأوفر تعليمات لتكرار المشكلة باستخدام إجراء استيراد mbox مع صندوق وارد يحتوي على هذه الرسالة فقط.
لقد حصلت على نفس النتائج التي حصلت عليها أنت، لذا فإن المشكلة ليست هناك. سأقوم بتشغيل استيراد باستخدام هذا البريد الإلكتروني فقط وفئة جديدة للتأكد من أن هذا ليس أثرًا جانبيًا من أي نوع.
ملف shared/standalone/import/settings.yml دون تعديلات
حذف ملف shared/standalone/import/data/index.db من الاستيراد السابق
تغيير رأس Message-ID:
نسخ windows.txt إلى shared/standalone/import/data/windows4/windows.mbox
تشغيل الأمر ./launcher enter import
تنفيذ الاستيراد عبر:
root@forum:/var/www/discourse# import_mbox.sh
بدء استيراد mbox...
تحميل المجموعات الموجودة...
تحميل المستخدمين الموجودين...
تحميل التصنيفات الموجودة...
تحميل المنشورات الموجودة...
تحميل المواضيع الموجودة...
إنشاء الفهرس
فهرسة الملفات في /shared/import/data/windows4
فهرسة /shared/import/data/windows4/windows.mbox
فهرسة الردود والمستخدمين
إنشاء التصنيفات
1 / 1 (100.0%) [8121278 عنصر/دقيقة]
إنشاء المستخدمين
تخطي مستخدم واحد تم استيراده مسبقًا
إنشاء المواضيع والمنشورات
1 / 1 (100.0%) [219 عنصر/دقيقة]
تحديث حالة الموضوع
تحديث bumped_at في المواضيع
تحديث last posted at في المستخدمين
تحديث last seen at في المستخدمين
تحديث first_post_created_at...
تحديث عدد منشورات المستخدم...
تحديث عدد المواضيع للمستخدم...
تحديث مستخدمو الموضوع
تحديث توقيتات المنشورات
تحديث مستخدمو الموضوع المميز
تحديث المواضيع المميزة في التصنيفات
9 / 9 (100.0%) [1562 عنصر/دقيقة] ]
إعادة تعيين عدادات المواضيع
تم بنجاح (00س 00د 09ث)
حصلت على نفس النتيجة المذكورة أعلاه، والتي يمكنك مشاهدتها هنا.
أو أن الاختلاف يكمن في طريقة استخراج الرسالة من ملف mbox: وهنا يكمن الفرق في مسار الكود. السطر raw_email = File.read("/tmp/windows.mbox") المذكور أعلاه يختلف عن تقسيم الملف باستخدام التعبيرات النمطية، وربما يكون هذا هو السبب في حدوث الأخطاء.
وبالفعل، يؤدي إضافة File.open('/tmp/message.txt', 'w') { |file| file.write(receiver.raw_email) } بعد هذا السطر إلى إنشاء ملف التالي، وهو مختلف عن الملف الأصلي.
بعد تضييق نطاق مكان حدوث التحول غير المرغوب فيه، يبدو أنه هنا:
دالة line.scrub مسؤولة عن تحويل المحتوى إلى شيء يختلف عن الأصل. إذا تم إزالتها، يفشل التعبير النمطي (regexp) بالخطأ التالي:
...
1: from /var/www/discourse/script/import_scripts/mbox/support/indexer.rb:174:in `block in each_mail'
/var/www/discourse/script/import_scripts/mbox/support/indexer.rb:174:in `=~': invalid byte sequence in UTF-8 (ArgumentError)
لأن المحتوى ليس UTF-8 بالفعل
هل لديك أي فكرة عن كيفية حل هذه المشكلة؟ ربما المرور الأول على رؤوس البريد الإلكتروني فقط للبحث عن مجموعة الأحرف (charset)؟ يبدو أن هناك مشكلة و هنا.