متوفر أيضًا بلغات أخرى: English · Español · Português · Français
ترميز المحارف: كل الترميزات التي يعرفها المتصفح
القائمة الكاملة التي يجب على المتصفح دعمها، وأداة فكّ ترميز تعمل في متصفحك أنت، وما يؤول إليه كل وسم حقًّا.
ما ترميز المحارف؟
الملف يحوي بايتات. وترميز المحارف هو الاتفاق الذي يحوّل تلك البايتات إلى حروف: أن البايت 0x41 هو A، وأن البايتين 0xC3 0xA9 هما é. وإذا اختلّ الاتفاق ظهر ما يسمّى الموجيباكي: البايتات نفسها مقروءةً بالجدول الخطأ، فتخرج é في موضع é.
كانت هذه الاتفاقات بالمئات، واحدًا لكل لغة ولكل شركة. ثم ضيّقتها الوِب: يعدّد معيار الترميز لدى WHATWG أربعين ترميزًا بالضبط، ومعها 228 وسمًا تسمّيها، وهو من النوادر لأنه قائمة لا يمكن أن تكبر. يقولها بلفظه: الجدول يضم كل الترميزات والوسوم التي يجب على وكيل المستخدم دعمها، ويجب ألّا يدعم سواها. واحد من الأربعين هو المعتمد، والتسعة والثلاثون الباقية تحت عناوين تبدأ بكلمة «موروثة».
هذا الانغلاق هو ما يفصل هذه القائمة عن أي سجل تشبهه. فالسجل يدوّن ما هو قائم ويزداد صفوفًا، وهذه سقف.
طريقة الاستخدام
- أدخل بضعة بايتات. تُقرأ الأرقام الست عشرية بايتاتٍ، فـ93 77 6f 72 6c 64 94 سبعة منها. وأي شيء آخر يُعامَل نصًّا ويُرمَّز أولًا بـ UTF-8، لأنه الترميز الوحيد الذي يعرف المتصفح كتابته.
- سمِّ ترميزًا. يصلح أي وسم من الوسوم الـ228، بأي حالة أحرف. والوسم غير المعروف فشلٌ لا رجوع صامت إلى غيره، وهذا ما يوجبه المعيار.
- اقرأ المقارنة في الأسفل. تُفكّ البايتات نفسها بأربعة وسوم مختلفة تؤول كلها إلى ترميز واحد، فتخرج الصفوف الأربعة متطابقة، وهذا هو المقصود.
لا وجود لترميز اسمه ASCII، ولا لـLatin-1
اطلب من المتصفح ascii فيعطيك windows-1252. واطلب us-ascii أو iso-8859-1 أو latin1 أو cp819 أو ansi_x3.4-1968 فيعطيك windows-1252 من جديد. سبعة عشر وسمًا من الـ228 مكدّسة على ذلك الصف وحده، ولا ASCII ولا ISO-8859-1 موجود في المعيار باسمه الخاص، بينما ISO-8859-2 وISO-8859-15 موجودان، وهذا ما يجعل الغياب قرارًا لا سهوًا.
وأهمية ذلك أن windows-1252 ليس ISO-8859-1. فبفكّ قيم البايت الـ256 كلها وفق التعريفين، يختلفان في 27 منها، وتقع السبع والعشرون جميعها في المدى 0x80 إلى 0x9F، وهو مدى تملؤه ISO-8859-1 برموز تحكّم غير مرئية وملأته مايكروسوفت بعلامات ترقيم. فالبايت 0x80 هو رمز اليورو، ومن 0x91 إلى 0x94 علامات الاقتباس المنحنية، و0x96 و0x97 هما الشرطتان المتوسطة والطويلة، و0x85 هو علامة الحذف.
أي أن المحارف التي يختلف عليها التعريفان هي بالضبط ما يدسّه معالج النصوص من تلقاء نفسه، ولهذا يظل مستند محفوظ ومُقدَّم على أنه Latin-1 يعرض علامات الاقتباس صحيحةً: لأن المتصفح لم يكن يستعمل Latin-1 أصلًا. وخمس من القيم التي تركتها مايكروسوفت فارغة تبقى محارف تحكّم بدل أن تصير U+FFFD، فلا يفشل شيء في ذلك المدى عند فكّ الترميز.
وهذا يقيّد أيضًا مدى الثقة بأن الترميز الأحادي البايت شاملٌ لكل بايت: بين الترميزات الثمانية والعشرين الأحادية 150 موضعًا بلا محرف البتة، تُفكّ إلى U+FFFD، موزّعة على تسعة منها. فالقول إن كل بايت محرف افتراضٌ معقول وخاطئ.
يقرأ أربعين ويكتب واحدًا
يفكّ المتصفح الأربعين جميعًا، ويكتب واحدًا بالضبط. فالمعيار يثبّت خاصية encoding في مُرمِّز النص على utf-8، ولا يعطي بانيَه أي وسيط، فلا سبيل مدعومًا لتطلب من متصفح أن يكتب Shift_JIS أو windows-1251. ويمضي البند 4.3 بالقاعدة أبعد: حين يحتاج تحليل رابط أو إرسال نموذج إلى ترميز خرج، يُعاد كتابة replacement وترميزَي UTF-16 إلى UTF-8 قبل كتابة أي شيء.
ومدخل واحد أغرب من سائرها: الترميز المسمّى replacement لا يفكّ شيئًا، إذ يصير أي دخل غير فارغ محرفًا واحدًا هو U+FFFD. ستة وسوم تشير إليه، خمسة منها ترميزات حقيقية مستعملة — ISO-2022-CN وISO-2022-KR وHZ-GB-2312 وأسماؤها البديلة. ويصرّح المعيار بالسبب: وُجد لمنع هجمات تستغل التفاوت بين الترميزات التي يدعمها الخادم وتلك التي يدعمها العميل. ونجا ISO-2022-JP من التشذيب نفسه لأن محتوى كثيرًا يعتمد عليه.
ووسم واحد يحسم سؤالًا يخطئ فيه الناس: utf-16، من دون تحديد ترتيب البايتات، يعني الترتيب الصغير أولًا. والوسم unicode كذلك.
ما لا تستطيع هذه الصفحة إخبارك به
أداة فكّ الترميز هنا هي أداة متصفحك لا أداتنا، وهذا مقصود: فهو التنفيذ الوحيد الذي تعنيك إجابته، وهو الذي كُتب المعيار من أجله. ويعني ذلك أيضًا أن النتيجة قد تختلف عن بيئة أخرى؛ فـNode مثلًا يرفض ترميز replacement رفضًا صريحًا مع أن المعيار يوجب دعمه، فما يُفكّ هنا قد لا يُفكّ في سكربت.
وثانيًا، تخبرك هذه الصفحة بمعنى الوسم لا بماهية الملف. فليس في تسلسل البايتات ما يدل على الترميز الذي أنتجه، وتخمين ذلك مسألة أخرى أصعب بكثير، والجواب الأمين لأي ملف تملكه هو تحويله إلى UTF-8 والكفّ عن التخمين.
وثالثًا، هذا معيار للوِب. أما قواعد البيانات والطرفيات ولغات البرمجة فتنفّذ جداولها الخاصة، وهي لا تتفق دائمًا. وبمقارنة بايت ببايت مع مكتبة codecs في بايثون عبر الترميزات الثمانية والعشرين الأحادية، تطابق ثمانية عشر منها تمامًا، واختلفت البقية في 89 موضعًا من 7168، أغلبها حيث يرفض بايثون بايتًا تركته مايكروسوفت غير معرَّف ويعيد المتصفح بدله محرف تحكّم. ويبقى خلاف حقيقي واحد في موضعين من KOI8-U، حيث ورث المشروعان نسختين مختلفتين من الترميز نفسه.
لماذا هي مجانية؟
الجدول بضعة كيلوبايتات تُشحن مع الصفحة، وفكّ الترميز يقوم به المتصفح الذي تملكه أصلًا. لا يُرفع شيء مما تكتبه، ولا يُسجَّل شيء، ولا حساب عليك إنشاؤه.
بلا تسجيل، وبلا حدود، وبلا علامة مائية على أي شيء تنسخه.