Hex / ASCII / Unicode
الترميزتحويل بين النص و بايتات UTF-8 السداسية و نقاط رموز Unicode.
- نص
- سداسي (UTF-8)
- نقاط الرموز
في هذه الصفحة
ما هو مُحوِّل Hex / ASCII / Unicode؟#
يمكن كتابة نفس قطعة النص بثلاث طرق مختلفة فعلًا، وتتيح لك هذه الأداة رؤية كلتها في وقت واحد:
- نص — المحارف الحرفية كما تكتبها وتقرؤها (
Hello 世界 🌍). - بايتات سداسية — تتابع بايتات UTF-8 الخام بالسداسي عشر، بايت واحد لكل زوج (
48 65 6C 6C 6F 20 ...). هذا ما يسافر فعلًا عبر شبكة أو يجلس في ملف. - نقاط الرموز — قيم Unicode القياسية،
U+XXXXواحدة لكل محرف (U+0048 U+0065 ... U+1F30D). هكذا يُرقِّم Unicode نفسه المحارف، مستقلًّا عن أي ترميز بايتات.
السبب في أن هذه المناظر الثلاثة تهم أنها ليست الطول نفسه بمجرد مغادرة ASCII — وهذا المصدر الوحيد لالتباس ترميز النص أكثر من أي شيء آخر. المحرف الواحد نقطة رمز واحدة، لكنه قد يحتل بايتًا إلى أربعة بايتات في UTF-8. إيموجي الكرة الأرضية 🌍 محرف واحد (U+1F30D)، لكن في UTF-8 هو أربع بايتات (F0 9F 8C 8D). إن سبق أن أحصيت طول سلسلة خطأً، أو رفضت قاعدة بيانات سلسلة بوصفها “طويلة جدًا”، أو هبطت عملية قطع سلسلة فرعية في وسط محرف، فقد قابلت هذه الفجوة بالفعل.
حرّر أيًّا من التمثيلات الثلاثة ويُشتق الآخران فورًا. المحلّل متسامح: يقبل إدخال السداسي المسافات والنقطتين والشرطات وبادئات 0x؛ ويقبل إدخال نقاط الرموز U+، و\\u، و0x، أو سداسي مجرد، مفصولة بمسافات أو فواصل أو فاصلات منقوطة.
كيفية الاستخدام#
- استخدم مُحدِّد الوضع فوق صندوق الإدخال لتُصرِّح بما تكتب: نص، أو سداسي، أو نقاط الرموز.
- الصق أو حرّر في صندوق الإدخال. تملأ المنظران الآخران تلقائيًّا على اليمين.
- استخدم نسخ بجوار أي من حقول النتائج الثلاثة لأخذ ذلك التمثيل.
- يحمِّل مثال
Hello 世界 🌍لترى كيف يميِّز ASCII وCJK والإيموجي. ويُفرغ مسح كل شيء.
الميزات الرئيسية#
- ثلاثة مناظر، مصدر حقيقة واحد. حرّر أي تمثيل يصادفك؛ ويُحسَب الآخران، لا تُحافَظ يدويًّا.
- بايتات UTF-8، لا Latin-1. الناتج السداسي هو تتابع بايتات UTF-8 الفعلي على السلك، الذي يستخدمه كل نظام حديث تقريبًا — لا افتراض البايت الواحد لكل محرف القديم.
- يدرك نقاط الرموز، بما فيها المحارف النجمية. تكرار
for...ofيعني أن إيموجي يُحسَب كنقطة رمز واحدة، لا كنصفَي بديل، فترىU+1F30D— لاD83C DF0Dأبدًا. - صارم في طريق العودة. البايتات السداسية التي لا تُكوِّن UTF-8 صالحًا (سلسلة بطول فردي، أو بايت متابعة معلَّق) يُبلَّغ عنها بخطأ واضح بدلًا من فكها إلى نص مُربك. ونقاط الرموز خارج النطاق الصالح، والبدائل المنفردة (
U+D800–U+DFFF)، تُرفض.
مثال عملي#
حمِّل مثال لتحصل على Hello 世界 🌍، والمناظر المشتقة الثلاثة هي:
Text: Hello 世界 🌍
Hex bytes: 48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D
Code points: U+0048 U+0065 U+006C U+006C U+006F U+0020 U+4E16 U+754C U+0020 U+1F30D
الحروف ASCII H e l l o هي الجزء المُمل: بايت واحد لكل منها، ونقاط رموز من U+0048 إلى U+006F. الجزء المثير هو الباقي:
世(U+4E16) ثلاث بايتات UTF-8:E4 B8 96. و界(U+754C) ثلاث بايتات أيضًا:E7 95 8C. محرف واحد، لكن لا بايت واحد.🌍(U+1F30D) أربع بايتات UTF-8:F0 9F 8C 8D. نقطة الرمز فوقU+FFFF، فتعيش في المستوى النجمي لـ Unicode وتحتاج تتابع UTF-8 من 4 بايتات — ومع ذلك فهي محرف واحد، إدخال واحد في قائمة نقاط الرموز.
شغّل التجربة معكوسة: بدِّل الوضع إلى نقاط الرموز، الصق U+1F600 U+1F604، وراقب ظهور النص (إيموجي عائلة 😄 😄) والسداسي UTF-8 معًا. هذا الذهاب والإياب هو بالضبط كيف تُؤكِّد أي البايتات تقابل أي محرف.
الأسئلة الشائعة#
لماذا يأخذ إيموجي أربع بايتات سداسية لكن نقطة رمز واحدة فقط؟#
لأن UTF-8 ترميز متغير العرض. نقاط الرموز دون U+0080 تتسع لبايت واحد؛ وU+0080–U+07FF تأخذ اثنتين؛ وU+0800–U+FFFF تأخذ ثلاثًا؛ وأي شيء عند أو فوق U+10000 (معظم الإيموجي، والخطوط التاريخية، والرموز الموسيقية) يأخذ أربعًا. نقطة الرمز هي اسم Unicode للمحرف؛ والبايتات هي كيف يخزّنها UTF-8. نفس المحرف، رقمان مختلفان.
ما الفرق بين U+XXXX و\\uXXXX؟#
يشيران إلى نفس نقطة الرمز لكن يأتيان من عالمين مختلفين. U+0041 هو تدوين Unicode نفسه. و\\u0041 هو التهريب المستخدم في السلاسل النصية لـ JavaScript وJava وC. الفخ: \\uXXXX يحمل أربع خانات سداسية فقط، فلا يستطيع التعبير المباشر عن نقطة رمز نجمية مثل U+1F30D — فاللغات التي تستخدم \\u تحتاج إمّا زوجًا بديلًا (🌍) أو صيغة موسعة مثل \\u{1F30D}. يقبل إدخال نقاط الرموز في هذه الأداة كلتي الصيغتين.
لصقت بايتات سداسية وحصلت على خطأ “UTF-8 غير صالح”. ماذا يعني؟#
البايتات التي لصقتها لا تُكوِّن تتابع UTF-8 قانونيًّا — غالبًا لأن السلسلة السداسية بطول فردي (نصف بايت مفقود)، أو يدَّعي بايت قائد تتابعًا متعدد البايتات لا تُكمِّله البايتات التالية، أو كانت البيانات مفعلًا مرمَّزة بشيء غير UTF-8 (GBK، Shift-JIS، Latin-1 خام). يستخدم الفاكّ الوضع الصارم فيُبلَّغ عن المشكلة بدلًا من إنتاج محارف استبدال بصمت.
هل أستطيع استخدام هذا لحساب المحارف “الحقيقية” في سلسلة؟#
نعم — عدد نقاط الرموز هو العدد الذي يفكر فيه المستخدم، وهو ما يجب أن تحدّ معظم الواجهات بناءً عليه. لاحظ أن Hello 世界 🌍 هو 10 محارف بنقاط الرموز، رغم أنه 17 بايت في UTF-8 و11 وحدة رمز UTF-16 في JavaScript (string.length). إن احتجت ميزانية محارف لتغريدة أو حقل نموذج، فاحسب نقاط الرموز، لا البايتات ولا string.length.