حاسبة حجم النص بالبايت بترميز UTF-8
المدخلات
| النص | Héllo |
|---|
حاسبة حجم النص بالبايت بترميز UTF-8
أدخل أي نص لمعرفة حجمه بالبايت في ترميز UTF-8، وحجمه بالبايت في ترميز UTF-16، وعدد الأحرف (نقاط الترميز). يَشغل كل حرف ASCII بايتًا واحدًا في UTF-8، بينما تشغل الحروف ذات العلامات حرفين، ومعظم الكتابات الأخرى ثلاثة، والرموز التعبيرية أربعة — لذلك قد يكون حجم النص بالبايت أكبر من عدد الأحرف الظاهرة.
المدخلات
النص
النتائج
أدخل قيمة لعرض النتائج.
الحجم
حجم النص بالبايت بترميز UTF-8
سلسلة النص وعدد البايتات التي تشغلها ليسا شيئًا واحدًا. على الشاشة تكون الكلمة سلسلة من الأحرف؛ أما في التخزين وعلى الشبكة فهي سلسلة من البايتات، ونادرًا ما يتطابق العددان. تأخذ هذه الحاسبة نصًا وتعيد ثلاثة أرقام: كم حرفًا (نقطة ترميز يونيكود) يحتويه، وكم بايتًا يشغله بترميز UTF-8، وكم بايتًا يشغله بترميز UTF-16. وهي مفيدة في تحديد أحجام أعمدة قواعد البيانات، والتحقق من حدود واجهات البرمجة وطول الرسائل، وفهم سبب أن سلسلة تبدو قصيرة قد تكون كبيرة على نحو مفاجئ.
الأحرف مقابل البايتات
الحرف وحدة كتابية: حرف هجائي، أو رقم، أو رمز تصويري، أو رمز تعبيري. يخصّص يونيكود لكل منها رقمًا يُسمى نقطة الترميز، ويُكتب مثل U+00E9. أما البايت فهو وحدة تخزين من ثمانية بِتات. والترميز هو القاعدة التي تحوّل نقاط الترميز إلى بايتات، وترميزات مختلفة تنتج أعداد بايتات مختلفة للنص نفسه.
في النصوص اللاتينية البسيطة يسهل أن يمرّ هذا الفرق دون انتباه، لأن كل حرف ASCII يصادف أن يكون عددًا صحيحًا من البايتات في الترميزات الشائعة. ويظهر الفرق بمجرد أن يحتوي النص على حروف بعلامات، أو كتابات غير لاتينية، أو رموز تعبيرية.
كيف يحدّد UTF-8 حجم الحرف
UTF-8 ترميز متغير العرض: يشغل الحرف من بايت إلى أربعة بايتات بحسب نقطة ترميزه.
U+0000–U+007F(ASCII: الحروف اللاتينية بلا علامات، الأرقام، علامات الترقيم الشائعة): بايت واحدU+0080–U+07FF(العلامات اللاتينية، اليونانية، السيريلية، العبرية، العربية): بايتانU+0800–U+FFFF(معظم كتابات CJK وغيرها): ثلاثة بايتاتU+10000فما فوق (الرموز التعبيرية والأحرف النادرة): أربعة بايتات
ولأن أحرف ASCII تظل بايتًا واحدًا، فإن UTF-8 متوافق رجعيًا مع ASCII، وهذا جزء كبير من سبب صيرورته الترميز الافتراضي للويب ولملفات النصوص.
كيف يحدّد UTF-16 حجم الحرف
يخزّن UTF-16 معظم الأحرف في وحدة ترميز واحدة بطول 16 بِتًا، أي بايتين. أما الأحرف التي تتجاوز U+FFFF — الرموز التعبيرية وغيرها من الرموز النادرة — فتُخزَّن كزوج بديل من وحدتي ترميز، فتشغل أربعة بايتات. ولا توجد حالة بايت واحد: حتى الحرف اللاتيني العادي يكلّف بايتين في UTF-16. وهذا هو تنسيق السلاسل في الذاكرة في لغات مثل Java و C# و JavaScript.
مثال محلول
لنأخذ النص Héllo.
هناك 5 أحرف لكن 6 بايتات في UTF-8، لأن é يقع في نطاق البايتين. وفي UTF-16 يكون كل حرف من الأحرف الخمسة وحدة ترميز من بايتين، فيصبح المجموع 10 بايتات.
ولنأخذ الآن رمزًا تعبيريًا واحدًا، 😀 (U+1F600). إنه حرف واحد، لكنه يقع فوق U+FFFF. يرمّزه UTF-8 بأربعة بايتات، ويخزّنه UTF-16 كزوج بديل، وهو أيضًا أربعة بايتات — ومع ذلك يبقى عدد الأحرف 1 فقط.
لماذا يهمّ حجم البايت
تُحسب حدود الأنظمة الواقعية عادةً بالبايتات لا بالأحرف. فقد يحدّ عمود VARCHAR(255) البايتات أو الأحرف بحسب قاعدة البيانات ومجموعة أحرفها؛ كما أن قيود طول الرسائل، وحقول حمولة واجهات البرمجة، وأحجام ترويسات HTTP، ومدقّقات النماذج كثيرًا ما تُعبَّر عنها بالبايتات. وقياس الحجم بالبايت في UTF-8 مسبقًا يكشف ما إذا كانت القيمة ستتسع، ومقدار المساحة أو النطاق الترددي الذي ستستهلكه — وهو ما لا يستطيع عدد الأحرف وحده أن يبيّنه.
حاسبات ذات صلة
لرؤية قيم البايتات الفعلية لسلسلة بصيغ ثنائية وست عشرية وعشرية، استخدم تحويل النص إلى ثنائي / سداسي عشري / ASCII. ولقياس حجم النص بعد تغليفه بترميز Base64 للنقل، انظر حاسبة عبء ترميز Base64. ولتقدير مقدار المعلومات التي تحملها السلسلة بدلًا من المساحة التي تشغلها، يحسب حاسبة إنتروبيا شانون إنتروبيتها.
الأسئلة الشائعة (FAQ)
لماذا يكون حجم البايت أكبر من عدد الأحرف؟
الحرف هو ما تراه، أما البايت فهو طريقة تخزينه. في UTF-8، تتسع أحرف ASCII الأساسية فقط (الحروف اللاتينية بلا علامات، والأرقام، وعلامات الترقيم الشائعة) في بايت واحد. أما الحروف ذات العلامات مثل é فتستخدم بايتين، ومعظم الكتابات الأخرى ثلاثة بايتات، والرموز التعبيرية أربعة. لذلك يشغل أي نص يحتوي على أحرف غير ASCII بايتات أكثر من عدد أحرفه.
وفي UTF-16 يكون الفارق أكبر مع نص ASCII، لأن كل حرف هناك يستخدم بايتين على الأقل.
ما الفرق بين UTF-8 و UTF-16؟
كلاهما طريقة لتحويل أحرف يونيكود إلى بايتات. يستخدم UTF-8 عرضًا متغيرًا من بايت إلى أربعة بايتات لكل حرف، وهو متوافق رجعيًا مع ASCII، مما جعله الترميز السائد على الويب وفي الملفات. أما UTF-16 فيستخدم بايتين لمعظم الأحرف وأربعة للأحرف النادرة التي تتجاوز المستوى الأساسي متعدد اللغات (مثل الرموز التعبيرية)؛ وهو التمثيل الشائع للنصوص في الذاكرة في لغات مثل Java و C# و JavaScript.
بالنسبة للنصوص اللاتينية في الغالب يكون UTF-8 أصغر؛ أما النصوص التي تغلب عليها كتابات شرق آسيا فيتقاربان فيها غالبًا.
كم بايتًا يشغل الحرف الواحد؟
في UTF-8 يعتمد ذلك على نقطة الترميز: U+0000–U+007F (ASCII) بايت واحد، و U+0080–U+07FF (العلامات اللاتينية واليونانية والسيريلية والعبرية والعربية) بايتان، و U+0800–U+FFFF (معظم كتابات CJK وغيرها) ثلاثة بايتات، و U+10000 فما فوق (الرموز التعبيرية والأحرف النادرة) أربعة بايتات.
وفي UTF-16 تشغل الأحرف نفسها بايتين حتى U+FFFF وأربعة بايتات لما يتجاوزها، حيث تُخزَّن كزوج بديل (surrogate pair).
متى يكون حجم البايت مهمًا؟
يُقاس التخزين والنقل بالبايتات لا بالأحرف. قد يحدّ عمود قاعدة بيانات معرَّف بـ VARCHAR(255) عدد البايتات أو عدد الأحرف بحسب المحرّك ومجموعة الأحرف؛ وكثيرًا ما تُعبَّر حدود حقول واجهات البرمجة وأطوال الرسائل وقيود النماذج بالبايتات.
معرفة الحجم بالبايت في UTF-8 تساعد على توقع ما إذا كانت القيمة ستتسع ومقدار المساحة أو النطاق الترددي الذي ستستهلكه.
التالي الموصى به
تحويل النص إلى ثنائي / سداسي عشري / ASCII
أدخل أي نص لعرضه بالنظام الثنائي والسداسي العشري وأكواد الأحرف العشرية. يتبع الثنائي والسداسي العشري تسلسل بايتات UTF-8، بينما يعرض النظام العشري نقطة الترميز اليونيكود لكل حرف — وهي قيمة ASCII المألوفة في النص الإنجليزي البسيط.