كيف يمكنك استكشاف مشكلات ترميز الأحرف وإصلاحها؟

StackOverflow https://stackoverflow.com/questions/29499

  •  09-06-2019
  •  | 
  •  

سؤال

إذا كان كل ما تراه هو المربعات القبيحة الخالية من الأحرف، فما الأدوات أو الاستراتيجيات التي تستخدمها لمعرفة الخطأ الذي حدث؟

(السيناريو المحدد الذي أواجهه هو وجود مربعات خالية من الأحرف داخل <select> عندما يجب أن تعرض الأحرف اليابانية.)

هل كانت مفيدة؟

المحلول

أولاً، قد لا تمثل "المربعات القبيحة الخالية من الأحرف" مشكلة في التشفير، بل قد تكون مجرد علامة على عدم وجود خط مثبت يمكنه عرض الحروف الرسومية في الصفحة.

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

لذلك تحتاج إلى التحقق من مصدر البيانات التي تم تشفيرها بشكل خاطئ، وما هو ترميز الأحرف الموجود في المصدر، وما هو الترميز الذي يتم تلقيها به.أفضل طريقة هي إرسال الشخصيات التي تعرف أن النظام يواجه مشكلات معها، وفحصها في كل مستوى من مستويات التطبيق.كيف تبدو داخل التطبيق؟في قاعدة البيانات؟عند استعادتهم من قاعدة البيانات؟متى يتم عرضها في المتصفح؟

آسف لكوني عامًا جدًا، لكن السؤال لا يعطي الكثير للعمل معه.

نصائح أخرى

إذا أصبحت البيانات التي ترسلها إلى المتصفح مشوهة (moji-bake)، فستحصل على أحرف المهملات.وأيضًا، إذا قمت بتحديد مجموعة أحرف خاطئة في رؤوس META الخاصة بك، فسيعرض متصفحك الصفحة بشكل غير صحيح، مما يتسبب في خبز moji مرة أخرى، وأحيانًا في أماكن عشوائية على الصفحة.

عند التعامل مع مجموعات أحرف CJK، يجب عليك التأكد من استخدام ترميز أحرف UTF8 طوال عمر البرنامج (تخزين البيانات، واسترجاعها، ومعالجة البيانات في التعليمات البرمجية الخاصة بك، وعرضها في المتصفح، وما إلى ذلك...)

ما هو UTF8؟يتعامل UTF8 مع التدفقات الثنائية للبيانات، وليس السلاسل.وهذا يعني أن مجموعات البت يمكن أن يكون لها طول متغير.أحرف ASCII لها طول ثابت يبلغ 8 بتات تمثل بايت واحد، ولكن يمكن أن تتكون أحرف UTF8 من 6 بتات، أو 8 بتات، أو 12 بتات، وما إلى ذلك...على هذا النحو، فإن UTF8 عرضة لما يسميه اليابانيون "mojibake".

كمبرمج، من قاعدة البيانات إلى قاعدة التعليمات البرمجية إلى المتصفح، يجب عليك محاولة استخدام UTF8 بالكامل.بالنسبة للبريد الإلكتروني، يمكنك استخدام UTF8، ولكنك ستجد على الأرجح أن معظم خوادم وعملاء البريد لا تزال قديمة وتستخدم مزيجًا من مجموعات الأحرف المختلفة (على سبيل المثال:ISO9022X).

إعدادات قاعدة البياناتإذا كنت من مستخدمي mysql، فتأكد من أن جميع الاتصالات بقاعدة البيانات تستخدم UTF8، وأن جميع الجداول/الحقول تستخدم UTF8.افتراضيًا، يستخدم mysql مجموعات الأحرف اللاتينية (السويدية).هؤلاء السويديون الغريبون يحبون روح الدعابة لديهم!!

التحقق من قاعدة التعليمات البرمجية الخاصة بكفي تجربتي مع المحررين مثل Notepad++، Notepad2، UltraEdit، e، إلخ...جميعهم لديهم مشاكل في دعم UTF8.إنها تعمل في الغالب، ولكن نظرًا لأن مطوريها لا يستخدمون لغات CJK بأنفسهم، فهم ليسوا متقنين.مشكلات مثل إيقاف تشغيل BOM (علامة ترتيب البايت)، وعلامات التبويب المشوهة، وتحويل مجموعة الأحرف الضعيف، وما إلى ذلك ...جميع المشاكل الحالية.

أوصي بشدة باستخدام محرر UTF8 المثبت مثل Maruo.تم تصنيع هذا بواسطة شركة يابانية، ولكن هناك نسخة باللغة الإنجليزية (ونسخة تجريبية) على http://www.hidemaru.interlink.or.jp/software/

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

التلاعب بالسلاسلتحتاج أي وظيفة سلسلة إلى أن تكون متعددة البايتات آمنة.لاحظ أنني لم أقل بايت مزدوج.UTF8 ليس بايت مزدوج ولكنه متعدد البايت، اعتمادًا على إجمالي عدد البتات المستخدمة لتمثيل الحرف.في PHP تحتاج إلى استدعاء وظائف سلسلة ميغابايت على وجه التحديد.تتمتع لغة Ruby واللغات الأخرى بدعم أكثر شفافية، ولكنك تحتاج إلى التحقق من المستندات لمعرفة نكهة خادم التطبيقات لديك!

العلامات الفوقيةقم بزيارة google.co.jp أو yahoo.co.jp للتعرف على رؤوس META الخاصة بهم.هذه هي المواقع التي تعرف كيفية القيام بذلك بشكل صحيح.قم بشكل أساسي بتضمين علامة META التالية في المستند <HEAD>

<meta http-equiv="content-type" content="text/html;مجموعة الأحرف=utf-8">

من الآمن عادةً خلط سمات نوع مستند HTML باللغة الإنجليزية مع الحرف أعلاه أيضًا.لذا يبدو أن إضافة علامة META أعلاه تعمل في مستند HTML الذي يحتوي على:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

بريد إلكترونيهذه علبة مختلفة تمامًا من الديدان.يعمل UTF8 كثيرًا، لكن العديد من العملاء اليابانيين الأقدم يستخدمون ISO2022X أكثر.هذا لا يستحق التغطية هنا.

تصحيح مشكلات UTF8بمجرد حصولك على محرر UTF8 موثوق به مثل Maruo، يمكنك إنشاء صفحات ثابتة وحل مشكلاتك.

امل ان يساعد

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top