عدّ الأحرف
مع المسافات ودونها، إضافةً إلى عدد البايتات الذي تقيسه فعلًا قاعدة بياناتك وبوابة الرسائل النصية. يُعدّ الرمز التعبيري هنا حرفًا واحدًا، لأنه كذلك فعلًا.
- لا يُخزَّن أبدًا
- لا طابور ولا انتظار
- دون تسجيل ودون علامة مائية
0
الأحرف
ما يراه الشخص
0
دون مسافات
باستثناء المسافات البيضاء
0
الكلمات
بأي لغة
0
بايتات UTF-8
ما تحسبه قاعدة البيانات
- الأسطركما يرقّمها محرر النصوص
- 0
- الجمللا تنقسم عند «Dr.» أو «etc.»
- 0
- الفقراتكتل يفصل بينها سطر فارغ
- 0
- نقاط الترميزما يطابقه «.» في التعبير النمطي
- 0
- وحدات UTF-16ما تُرجعه string.length في JavaScript
- 0
- بايتات UTF-8ما يقيسه حد VARCHAR وترويسات HTTP
- 0
- وقت القراءةقراءة صامتة، بمعدل 238 كلمة في الدقيقة
- —
- وقت التحدثبصوت مسموع، بمعدل 150 كلمة في الدقيقة
- —
- أطول كلمةبعدد الأحرف، لا البايتات
- —
- متوسط طول الكلمةمؤشر تقريبي لسهولة القراءة
- —
ابدأ الكتابة وستمتلئ الإحصاءات كلها. جرّب رمزًا تعبيريًا، أو جملة باللغة الصينية — فكلاهما يُحسب بالطريقة التي يعدّها بها الإنسان، وهو ما تخطئ فيه معظم أدوات العدّ.
كيف تعمل الأداة
الصق أو اكتب
يتحدث العدد أثناء الكتابة. لا يُخزَّن أي شيء.
اختر العدّ الذي تحتاجه
الأحرف، والأحرف دون مسافات، ونقاط الترميز، وبايتات UTF-8، كلٌّ منها معروض مع ما يستخدمه.
راقب حدّك
عناوين SEO وأوصاف meta وأجزاء رسائل SMS وحقل من 255 بايتًا، كلها تُتابَع مقارنةً بما كتبته.
أربعة أرقام، لأن كلمة «حرف» لها أربعة معانٍ
خذ رمز العائلة التعبيري، أو رمز الإبهام المرفوع بلون بشرة. يرى الإنسان حرفًا واحدًا. لكنه مبني من عدة نقاط ترميز تربطها وصلات غير مرئية، فيرى التعبير النمطي سبعة. ويخزّن JavaScript النص في وحدات من 16 بت، وكل ما يقع خارج النطاق الأساسي يأخذ وحدتين، فيُبلغ عن أحد عشر. وبترميز UTF-8 في عمود قاعدة بيانات يشغل خمسة وعشرين بايتًا. لا شيء من هذه الأرقام خطأ، ولا شيء منها هو الجواب؛ فالرقم الصحيح يعتمد كليًا على ما يفرض الحد.
لذا فالسؤال العملي هو: من فرض الحد؟ عمود قاعدة البيانات المعرّف كـ VARCHAR يعدّ البايتات في معظم المحركات، ولهذا فالحقل الذي يقبل 255 حرفًا إنجليزيًا يرفض عددًا أقل بكثير من الأحرف اليابانية. ورسالة SMS تتسع لـ 160 حرفًا بأبجديتها الخاصة ذات السبع بتات، وتنخفض إلى 70 لكل رسالة بمجرد أن يقع حرف واحد خارجها، فعلامة اقتباس منحنية واحدة أو رمز تعبيري واحد قد يحوّل رسالة واحدة إلى ثلاث. أما أداة التحقق من النماذج في JavaScript فتعدّ في الغالب وحدات UTF-16، ولهذا قد يرفض حقل يقول 280 حرفًا نصًا يبدو أقصر لكنه مليء بالرموز التعبيرية.
عدّ ما يراه القارئ هو الأصعب، ويتم بأداة تقسيم النص في المتصفح نفسه، وهي الآلية نفسها التي تحدد أين ينتقل المؤشر عند الضغط على مفتاح السهم الأيسر. وهذا هو التعريف الصحيح لـ «حرف واحد» في كل ما يدركه الإنسان، ويتعامل مع الحالات التي تُربك العدّ الأبسط: فالحرف المُشكَّل المكتوب كحرف أساسي مع علامة تشكيل مركّبة يُعدّ حرفًا واحدًا، وتُعدّ المجموعات الحرفية في الهندية والتايلاندية كما يعدّها قارئ هاتين الكتابتين.
في النثر الإنجليزي العادي تتطابق الأرقام الأربعة، ولهذا تبقى المشكلة خفية إلى أن تظهر. فهي تتباعد عند الرموز التعبيرية، والأحرف المُشكَّلة والمركّبة، والكتابات غير اللاتينية، والرموز الرياضية، وهذه بالضبط المدخلات التي تتسبب في اقتطاع حقل بصمت في قاعدة بيانات بعد ثلاثة أشهر من بنائها.
عندما تحتاج إلى شيء آخر
في الكود، استخدم دالة تعدّ ما تحتاجه بدلًا من الطول الافتراضي. Intl.Segmenter في JavaScript يعدّ ما يراه القارئ؛ وسلاسل Python 3 تعدّ نقاط الترميز، وlen(s.encode("utf-8")) يعدّ البايتات؛ وفي PHP توجد mb_strlen مقابل strlen لهذا التمييز تحديدًا. والافتراضي في معظم اللغات هو ما وجدته اللغة مريحًا، ونادرًا ما يكون ما يقصده حدّك.
حين يكون حقل قاعدة البيانات هو القيد، فالإصلاح الدائم يكون من المصدر. تعريف العمود كـ utf8mb4 في MySQL، أو text في PostgreSQL، يزيل فئة كاملة من أخطاء الاقتطاع، أما utf8 الأقدم في MySQL فمعروف بأنه لا يتجاوز ثلاثة بايتات للحرف ولا يستطيع تخزين رمز تعبيري إطلاقًا. والعدّ بعناية في النموذج حل التفافي لعمود كان ينبغي تعريفه بشكل مختلف.
الأسئلة الشائعة
هل يُخزَّن نصي في أي مكان؟
لا. لا يُخزَّن أي شيء ولا يُرسَل أي طلب، وتظل الأداة تعمل مع قطع الاتصال بالشبكة. وهذا أهم مما يبدو في حالة النصوص: فما يلصقه الناس في عدّاد أونلاين هو كتابات غير منشورة ومسودات قانونية وأعمال طلاب ومستندات داخلية.
لماذا توجد أربعة أعداد مختلفة للأحرف؟
لأن كلمة «حرف» لها أربعة معانٍ مختلفة، ومعظم الأدوات لا تعرف إلا واحدًا. ما تراه أنت كحرف واحد هو مجموعة حرفية (grapheme cluster)، فكلٌّ من «é» و«🎉» وحتى «👨👩👧👦» حرف واحد. وما يُبلغ عنه string.length في JavaScript هو وحدات ترميز UTF-16، وفيها رمز العائلة هذا يساوي 11. وما يطابقه التعبير النمطي هو نقاط الترميز، وفيها يساوي 7. وما يقيسه عمود قاعدة البيانات أو ترويسة HTTP هو بايتات UTF-8، وفيها يساوي 25. الأربعة كلها معروضة هنا، لأن ما تحتاجه يعتمد على الجهة التي تفرض الحد.
كم حرفًا يساوي الرمز التعبيري؟
حرفًا واحدًا هنا، لأنه كذلك بالنسبة إلى من يقرؤه، وهذا ما يعدّه حد الأحرف في المنصات الحديثة. أما في أماكن أخرى فقد يساوي 2 أو 7 أو 11: فالرمز «👨👩👧👦» أربعة أشخاص تربطهم ثلاثة أحرف وصل غير مرئية، فهو 7 نقاط ترميز و11 من الوحدات التي يعدّها string.length في JavaScript. إن رفض نموذجٌ نصك لأنه طويل جدًا مع أنه بدا قصيرًا بما يكفي، فهذا هو السبب عادةً، وسيُظهر لك عدد البايتات في هذه الصفحة الحجم الحقيقي.
لماذا فشل نصي المكوّن من 200 حرف في حقل قاعدة بيانات يتسع لـ 255 حرفًا؟
لأن الحقل على الأرجح يحدّ البايتات لا الأحرف. في UTF-8 يأخذ الحرف الإنجليزي العادي بايتًا واحدًا، لكن الأحرف المُشكَّلة تأخذ بايتين، والصينية واليابانية والعربية والرموز التعبيرية تأخذ ثلاثة أو أربعة. فـ 200 حرف ياباني تساوي 600 بايت. ويظهر عدد البايتات هنا لهذا السبب تحديدًا، فهو الرقم الذي تتحقق منه قاعدة بياناتك فعلًا.
لماذا يخفّض رمز تعبيري واحد حد رسالة SMS من 160 إلى 70؟
لأن الرسالة النصية تستخدم أبجدية مضغوطة من 7 بتات تتسع لـ 160 حرفًا، وهذه الأبجدية لا تحتوي على رموز تعبيرية ولا علامات اقتباس منحنية وتكاد لا تحتوي على أحرف مُشكَّلة. وحرف واحد خارجها يحوّل الرسالة بأكملها إلى Unicode، فينخفض الحد إلى 70. والفاصلة العليا المنحنية الملصوقة من Word تفعل ذلك بسهولة الرمز التعبيري نفسها. هكذا تُحتسب رسالة قصيرة كثلاث رسائل، وتخبرك الصفحة لحظة حدوث ذلك.
هل تُحتسب المسافات؟
يظهر الرقمان معًا، فلا حاجة إلى الاختيار. وفواصل الأسطر وعلامات الجدولة تُحتسب مسافات بيضاء أيضًا.
معلومة مفيدة: أربعة أرقام، لأن كلمة «حرف» لها أربعة معانٍ، والمعنى الذي تحتاجه يعتمد على الجهة التي تفرض الحد. عمود VARCHAR في قاعدة البيانات يعدّ بايتات UTF-8، والتعبير النمطي يعدّ نقاط الترميز، وJavaScript يعدّ وحدات UTF-16، والإنسان يعدّ ما يراه. وأكثر ما تختلف عليه هو الرموز التعبيرية.
أضِف هذه الأداة إلى موقعك
مجانية لأي مدونة أو صفحة فصل دراسي أو مقالة مساعدة. الصق مقتطفًا واحدًا وسيتمكن زوارك من استخدامها مباشرةً على صفحتك.