FreeToGenerate.com

أربعون ترميزًا، و228 اسمًا لها، ولا مكان لواحد وأربعين.

فكّ ترميز بضعة بايتات

iso-8859-1يؤول إلى windows-1252

13 · قُرئ بالنظام الست عشري

البايتات نفسها تحت أربعة وسوم

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

المعيار بالأرقام

ترميزًا
40
وسمًا
228
المعتمد
1
الموروثة
39
وسمًا على windows-1252
17

هذه القائمة لا تكبر. البند 4.2: يعدّد الجدول كل الترميزات والوسوم التي يجب على وكيل المستخدم دعمها، ويجب ألّا يدعم سواها.

يقرأ المتصفح الأربعين ويكتب واحدًا فقط. فـTextEncoder لا يأخذ وسيطًا وترميزه منصوص عليه أنه utf-8، بل حتى الروابط وإرسال النماذج ترتدّ إلى UTF-8 مع replacement ومع ترميزَي UTF-16.

الترميزات الأربعون

40 معروضة
الترميزالمجموعةالوسوم
UTF-8الترميزunicode-1-1-utf-8 unicode11utf8 unicode20utf8 utf-8 utf8 x-unicode20utf8
IBM866موروثة أحادية البايت866 cp866 csibm866 ibm866
ISO-8859-2موروثة أحادية البايتcsisolatin2 iso-8859-2 iso-ir-101 iso8859-2 iso88592 iso_8859-2 iso_8859-2:1987 l2 latin2
ISO-8859-3موروثة أحادية البايتcsisolatin3 iso-8859-3 iso-ir-109 iso8859-3 iso88593 iso_8859-3 iso_8859-3:1988 l3 latin3
ISO-8859-4موروثة أحادية البايتcsisolatin4 iso-8859-4 iso-ir-110 iso8859-4 iso88594 iso_8859-4 iso_8859-4:1988 l4 latin4
ISO-8859-5موروثة أحادية البايتcsisolatincyrillic cyrillic iso-8859-5 iso-ir-144 iso8859-5 iso88595 iso_8859-5 iso_8859-5:1988
ISO-8859-6موروثة أحادية البايتarabic asmo-708 csiso88596e csiso88596i csisolatinarabic ecma-114 iso-8859-6 iso-8859-6-e iso-8859-6-i iso-ir-127 iso8859-6 iso88596 iso_8859-6 iso_8859-6:1987
ISO-8859-7موروثة أحادية البايتcsisolatingreek ecma-118 elot_928 greek greek8 iso-8859-7 iso-ir-126 iso8859-7 iso88597 iso_8859-7 iso_8859-7:1987 sun_eu_greek
ISO-8859-8موروثة أحادية البايتcsiso88598e csisolatinhebrew hebrew iso-8859-8 iso-8859-8-e iso-ir-138 iso8859-8 iso88598 iso_8859-8 iso_8859-8:1988 visual
ISO-8859-8-Iموروثة أحادية البايتcsiso88598i iso-8859-8-i logical
ISO-8859-10موروثة أحادية البايتcsisolatin6 iso-8859-10 iso-ir-157 iso8859-10 iso885910 l6 latin6
ISO-8859-13موروثة أحادية البايتiso-8859-13 iso8859-13 iso885913
ISO-8859-14موروثة أحادية البايتiso-8859-14 iso8859-14 iso885914
ISO-8859-15موروثة أحادية البايتcsisolatin9 iso-8859-15 iso8859-15 iso885915 iso_8859-15 l9
ISO-8859-16موروثة أحادية البايتiso-8859-16
KOI8-Rموروثة أحادية البايتcskoi8r koi koi8 koi8-r koi8_r
KOI8-Uموروثة أحادية البايتkoi8-ru koi8-u
macintoshموروثة أحادية البايتcsmacintosh mac macintosh x-mac-roman
windows-874موروثة أحادية البايتdos-874 iso-8859-11 iso8859-11 iso885911 tis-620 windows-874
windows-1250موروثة أحادية البايتcp1250 windows-1250 x-cp1250
windows-1251موروثة أحادية البايتcp1251 windows-1251 x-cp1251
windows-1252موروثة أحادية البايتansi_x3.4-1968 ascii cp1252 cp819 csisolatin1 ibm819 iso-8859-1 iso-ir-100 iso8859-1 iso88591 iso_8859-1 iso_8859-1:1987 l1 latin1 us-ascii windows-1252 x-cp1252
windows-1253موروثة أحادية البايتcp1253 windows-1253 x-cp1253
windows-1254موروثة أحادية البايتcp1254 csisolatin5 iso-8859-9 iso-ir-148 iso8859-9 iso88599 iso_8859-9 iso_8859-9:1989 l5 latin5 windows-1254 x-cp1254
windows-1255موروثة أحادية البايتcp1255 windows-1255 x-cp1255
windows-1256موروثة أحادية البايتcp1256 windows-1256 x-cp1256
windows-1257موروثة أحادية البايتcp1257 windows-1257 x-cp1257
windows-1258موروثة أحادية البايتcp1258 windows-1258 x-cp1258
x-mac-cyrillicموروثة أحادية البايتx-mac-cyrillic x-mac-ukrainian
GBKصينية مبسّطة (موروثة)chinese csgb2312 csiso58gb231280 gb2312 gb_2312 gb_2312-80 gbk iso-ir-58 x-gbk
gb18030صينية مبسّطة (موروثة)gb18030
Big5صينية تقليدية (موروثة)big5 big5-hkscs cn-big5 csbig5 x-x-big5
EUC-JPيابانية (موروثة)cseucpkdfmtjapanese euc-jp x-euc-jp
ISO-2022-JPيابانية (موروثة)csiso2022jp iso-2022-jp
Shift_JISيابانية (موروثة)csshiftjis ms932 ms_kanji shift-jis shift_jis sjis windows-31j x-sjis
EUC-KRكورية (موروثة)cseuckr csksc56011987 euc-kr iso-ir-149 korean ks_c_5601-1987 ks_c_5601-1989 ksc5601 ksc_5601 windows-949
replacementمتنوعة (موروثة)csiso2022kr hz-gb-2312 iso-2022-cn iso-2022-cn-ext iso-2022-kr replacement
UTF-16BEمتنوعة (موروثة)unicodefffe utf-16be
UTF-16LEمتنوعة (موروثة)csunicode iso-10646-ucs-2 ucs-2 unicode unicodefeff utf-16 utf-16le
x-user-definedمتنوعة (موروثة)x-user-defined

الأسماء والوسوم والمجموعات من ملف encodings.json الخاص بمعيار الترميز لدى WHATWG. أما فكّ الترميز فيقوم به متصفحك، وهو ينفّذ المعيار نفسه.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

ترميز المحارف: كل الترميزات التي يعرفها المتصفح

القائمة الكاملة التي يجب على المتصفح دعمها، وأداة فكّ ترميز تعمل في متصفحك أنت، وما يؤول إليه كل وسم حقًّا.

ما ترميز المحارف؟

الملف يحوي بايتات. وترميز المحارف هو الاتفاق الذي يحوّل تلك البايتات إلى حروف: أن البايت 0x41 هو A، وأن البايتين 0xC3 0xA9 هما é. وإذا اختلّ الاتفاق ظهر ما يسمّى الموجيباكي: البايتات نفسها مقروءةً بالجدول الخطأ، فتخرج é في موضع é.

كانت هذه الاتفاقات بالمئات، واحدًا لكل لغة ولكل شركة. ثم ضيّقتها الوِب: يعدّد معيار الترميز لدى WHATWG أربعين ترميزًا بالضبط، ومعها 228 وسمًا تسمّيها، وهو من النوادر لأنه قائمة لا يمكن أن تكبر. يقولها بلفظه: الجدول يضم كل الترميزات والوسوم التي يجب على وكيل المستخدم دعمها، ويجب ألّا يدعم سواها. واحد من الأربعين هو المعتمد، والتسعة والثلاثون الباقية تحت عناوين تبدأ بكلمة «موروثة».

هذا الانغلاق هو ما يفصل هذه القائمة عن أي سجل تشبهه. فالسجل يدوّن ما هو قائم ويزداد صفوفًا، وهذه سقف.

طريقة الاستخدام

  1. أدخل بضعة بايتات. تُقرأ الأرقام الست عشرية بايتاتٍ، فـ93 77 6f 72 6c 64 94 سبعة منها. وأي شيء آخر يُعامَل نصًّا ويُرمَّز أولًا بـ UTF-8، لأنه الترميز الوحيد الذي يعرف المتصفح كتابته.
  2. سمِّ ترميزًا. يصلح أي وسم من الوسوم الـ228، بأي حالة أحرف. والوسم غير المعروف فشلٌ لا رجوع صامت إلى غيره، وهذا ما يوجبه المعيار.
  3. اقرأ المقارنة في الأسفل. تُفكّ البايتات نفسها بأربعة وسوم مختلفة تؤول كلها إلى ترميز واحد، فتخرج الصفوف الأربعة متطابقة، وهذا هو المقصود.

لا وجود لترميز اسمه 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، حيث ورث المشروعان نسختين مختلفتين من الترميز نفسه.

لماذا هي مجانية؟

الجدول بضعة كيلوبايتات تُشحن مع الصفحة، وفكّ الترميز يقوم به المتصفح الذي تملكه أصلًا. لا يُرفع شيء مما تكتبه، ولا يُسجَّل شيء، ولا حساب عليك إنشاؤه.

بلا تسجيل، وبلا حدود، وبلا علامة مائية على أي شيء تنسخه.