سؤال

يسمح لي محرر النصوص الخاص بي بالرمز في العديد من تنسيقات الأحرف المختلفة ANSI و UTF-8 و UTF-8 (بدون BOM) و UTF-16LE و UTF-16BE.

ما الفرق بينهم؟

ما الذي يُنظر إليه عادة على أنه أفضل تنسيق (أنا أستخدم بيثون إذا كان ذلك يجعل الاختلاف)؟

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

المحلول

  • "ANSI" هو تسمية خاطئة وعادة ما تشير إلى بعض الترميز 8 بت ، وهذا هو الافتراضي على النظام الأساسي الحالي (على عمليات "Western" Windows التي عادة ما تكون Windows-1252). يدعم فقط مجموعة صغيرة من الأحرف (256 حرفًا مختلفًا على الأكثر).
  • UTF-8 هو ترميز متغير ، متوافق مع ASCII قادر على تخزين أي وجميع أحرف Unicode. إنه اختيار جيد جدًا للنص الغربي الذي يجب أن يدعم جميع أحرف Unicode وخيار قابل للتطبيق للغاية في الحالة العامة.
  • "UTF-8 (NO BOM)" هو اسم Windows يعطيه استخدام UTF-8 دون كتابة أ بايت ترتيب علامة. منذ بوم لا حاجة بالنسبة إلى UTF-8 ، لا ينبغي استخدامه وسيكون هذا هو الخيار الصحيح (إلى حد كبير الجميع يطلق عليهم هذا الإصدار ببساطة "UTF-8"!).
  • UTF-16LE و UTF-16BE هما ليتل إنديان وكبير إنديان إصدارات UTF-16 التشفير. نظرًا لأن UTF-8 ، فإن UTF-16 قادر على تمثيل أي حرف Unicode ، ومع ذلك فهو غير متوافق مع ASCII.

بشكل عام ، يعد UTF-8 خيارًا شاملاً رائعًا ولديه توافق واسع (فقط تأكد من عدم كتابة BOM ، لأن هذا ما يتوقعه معظم البرامج الأخرى).

قد يستغرق UTF-16 مساحة أقل إذا كانت غالبية النص الخاصة بك مكونة من أحرف غير ASCII (أي لا تستخدم الأبجدية اللاتينية الأساسية).

يجب استخدام "ANSI" فقط عندما يكون لديك حاجة محددة للتفاعل مع تطبيق قديم لا يدعم Unicode.

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

على سبيل المثال ، إذا بدأت مشروع برنامج ، فيمكنك تحديد أن كل رمز المصدر الخاص بك في ترميز معين (مرة أخرى: أقترح UTF-8) والتمسك بذلك.

لملفات Python على وجه التحديد ، هناك طريقة لتحديد ترميز ملفات المصدر الخاصة بك.

نصائح أخرى

هنا. لاحظ أن "ANSI" عادة ما يكون CP1252.

ربما ستحصل على أكبر فائدة مع UTF-8 لا بوم. ننسى أن ANSI و ASCII موجودة ، وهما ديناصورات تم إهمالها.

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