أحاول استيراد بيانات من منتدى Vanilla باستخدام التعليمات المنشورة هنا. ومع ذلك، أواجه الخطأ التالي عند تشغيل سكريبت الاستيراد vanilla.rb:
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
parsing file...
reading file...
Traceback (most recent call last):
5: from script/import_scripts/vanilla.rb:254:in `<main>'
4: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
3: from script/import_scripts/vanilla.rb:17:in `execute'
2: from script/import_scripts/vanilla.rb:37:in `parse_file'
1: from script/import_scripts/vanilla.rb:72:in `read_file'
script/import_scripts/vanilla.rb:72:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
لقد جربت تغيير مجموعة أحرف قاعدة بيانات MySQL إلى UTF8 وفقًا للتعليمات الموجودة هنا ثم إعادة تصدير ملف التصدير، لكن ذلك لم يحل المشكلة. هل لديكم أي اقتراحات؟
يمكنك البحث في Google عن معلومات حول ترميز UTF-8. تحتاج إلى فعل شيء ما لإجبار الجدول على الترميز UTF-8. في المرة التي قمت فيها بذلك، كانت هناك تعقيدات إضافية لأن بعض الصفوف كانت بتنسيق واحد والبعض الآخر بتنسيق آخر. أعتقد أنني قمت ببعض الأمور غير المنطقية حيث أجبرت القيم على الترميز بشكل فردي لكل قيمة.
أوه، الأمر فظيع. أفضل رهان لك، بناءً على ذكرى ضبابية عن مرة واحدة قمتُ بها قبل أكثر من عام، هو تجربة أكبر عدد ممكن من التحويلات المختلفة حتى تجد أخيرًا واحدة تعمل مع جميع البيانات أو معظمها. أعتقد أنني قمتُ بعدة تحويلات فردية تبين أنها إضاعة للوقت عندما اعترتني صدفةً تحويل يعمل مع جميع (معظم؟) البيانات.
إليك ما فعلته. استخدمها على مسؤوليتك الخاصة. (كان هذا vbulletin، مجرد معلومة جانبية).
def char_map(raw_original)
raw = raw_original.dup
debug = false # (raw.length > 50)
# windows 1252
all = ''
win_encoded = ''
### WIN1252 encoding
win_encoded = ''
begin
win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
invalid: :replace, undef: :replace, replace: ""
).force_encoding('utf-8').scrub
rescue => e
puts "\n#{'-'*50}\nWin1252 failed for \n\n#{raw}\n\n"
win_encoded = ''
end
### ISO 8859 encoding
iso_encoded = ''
if all.length == 0 && win_encoded.length > 0 && win_encoded != raw
all = (debug ? "Win1252--" : '') + win_encoded
else
all = raw
end
all = old_char_map(all)
all
end
لقد مررت بهذه العملية قبل شهرين فقط (وأنا لست مطورًا ) وتمكنت من ترحيل منتدى Vanilla مستضاف ذاتيًا بنجاح إلى Discourse مستضاف ذاتيًا. كان أحد الأشياء الرئيسية بالنسبة لي هو التأكد عند تصدير البيانات باستخدام Vanilla Porter، من تحديد “Vanilla 2” كـ Source Forum Type في القائمة المنسدلة الأولى.
إذا كنت أتذكر بشكل صحيح، لم أواجه خطأ UTF-8 مرة أخرى عند استخدام نص Vanilla Porter الأحدث ونوع المنتدى “Vanilla 2”.
إذا لم تحدث هذين الاقتراحين فرقًا في استيرادك، فيرجى تقديم بعض التفاصيل حول الخطوات التي اتخذتها حتى الآن وما تراه بالضبط. في بعض الأحيان تكون هناك اختلافات طفيفة في “نفس الخطأ” يمكن أن تحدث فرقًا كبيرًا عند استكشاف الأخطاء وإصلاحها.