طريقة الاستخدام
- الصق النص أو اكتبه في النص. تتحدّث الأعداد كلما كتبت.
- اقرأ المحارف (الغرافيمات) للطول الذي يراه القارئ، ونقاط الترميز للعدد في يونيكود.
- اقرأ بايتات UTF-8 لحجم صفحة الويب أو الملف بالترميز المعتاد.
- في الحدود، راجع صفي SMS وX: المتبقي هو المساحة في الجزء أو المنشور الأخير.
المحارف ونقاط الترميز والغرافيمات
نقطة الترميز رقم واحد في جدول يونيكود. والمحرف كما يراه القارئ هو عنقود حرفي (grapheme cluster)، وقد يحتوي العنقود الواحد على عدة نقاط ترميز: فحرف e مع علامة نبرة مجمّعة نقطتا ترميز ومحرف واحد، والرمز التعبيري للعائلة المربوط بمُربطات بعرض صفر خمس نقاط ترميز ومحرف واحد.
يستخدم عدّ الغرافيمات أداة التجزئة في المتصفح، وهي تتبع قواعد يونيكود للعناقيد الحرفية (UAX #29). ومن قواعدها: لا يُكسر النص قبل محرف ممتد أو مُربط بعرض صفر، ويبقى تسلسل الرموز التعبيرية أو زوج المحارف الإقليمية معاً.
البايتات في UTF-8 وUTF-16 وUTF-32
- يستخدم UTF-8 بايتاً واحداً حتى U+007F، وبايتين حتى U+07FF، وثلاثة بايتات حتى U+FFFF، وأربعة فوق ذلك. والحروف العربية تأخذ بايتين لكل حرف في UTF-8.
- يستخدم UTF-16 وحدة من 16 بت لأغلب نقاط الترميز. ونقطة الترميز فوق U+FFFF تأخذ وحدتين، وهو زوج بديل (surrogate pair)، أي 4 بايتات.
- يستخدم UTF-32 أربعة بايتات بالضبط لكل نقطة ترميز.
حدود SMS
الرسالة المكتوبة بمحارف GSM 7 بت فقط تتسع لـ 160 محرفاً في رسالة واحدة. وإذا كانت أطول، يتسع كل جزء لـ 153 محرفاً، لأن جزءاً من حمولة الـ 140 بايتاً يُستخدم للترويسة. وتأخذ محارف الجدول الموسّع (التغذية الصفحية و^ { } \ [ ~ ] | وعلامة اليورو) موضعين لكل منها.
الرسالة التي فيها أي محرف خارج GSM-7 تُرسل بترميز UCS-2، وتتسع لـ 70 محرفاً في رسالة واحدة و67 في كل جزء من رسالة أطول. والحروف العربية كلها خارج GSM-7. وتعدّ الأداة كذلك الحروف ş وğ وı وİ وç وÇ خارجه، وهذا العد الأشد للنص التركي.
- جدول GSM-7 والجدول الموسّع مأخوذان من مقالة ويكيبيديا عن GSM 03.38 (باللغة الإنجليزية)؛ والمعيار نفسه هو 3GPP TS 23.038، Alphabets and language-specific information.
- الأرقام 153 و67 واردة في مقالة ويكيبيديا عن SMS (باللغة الإنجليزية)، التي تستشهد بمعيار 3GPP لأرقام 160 و70.
طول منشور X
يحسب X المنشور بـ 280 محرفاً موزوناً. أغلب المحارف وزنها 1، والرموز التعبيرية ومحارف CJK وزنها 2. والرابط يُحسب 23 مهما كان طوله. ونطاقات الأوزان هي المذكورة في ملف إعداد twitter-text (الإصدار 3)، وصفحة X لحساب المحارف تعطي القواعد نفسها بالكلام.
تجد الأداة الروابط التي تبدأ بـ http:// أو https://. والرابط المكتوب بلا البروتوكول يُحسب نصاً عادياً، فقد يُحسب المنشور الذي فيه مثل هذا الرابط أطول مما يحسبه X.
مثال محلول: مرحبا بالعالم 👋
يحتوي النص على 15 محرفاً، وهي أيضاً 15 نقطة ترميز. الرمز التعبيري نقطة ترميز واحدة لكنه وحدتان في UTF-16، فيكون طول السلسلة 16. وحجم UTF-8 هو 30 بايتاً: 10 للحروف العربية الخمسة (كل حرف بايتان)، و1 للمسافة، و14 لحروف ”بالعالم“ السبعة، و1 للمسافة الثانية، و4 للرمز التعبيري. وحجم UTF-16 هو 16 × 2 = 32 بايتاً، وحجم UTF-32 هو 15 × 4 = 60 بايتاً.
| المقياس | القيمة |
|---|---|
| المحارف (الغرافيمات) | 15 |
| وحدات UTF-16 البرمجية | 16 |
| بايتات UTF-8 | 30 |
| بايتات UTF-16 | 32 |
| بايتات UTF-32 | 60 |
| SMS، UCS-2: رسالة واحدة | 16 من 70، و54 متبقية |
| منشور X | 16 من 280، و264 متبقية |
الأسئلة الشائعة
لماذا يُعد الرمز التعبيري محرفاً واحداً هنا، وهو وحدتان في UTF-16؟
الرمز التعبيري خارج المستوى الأساسي متعدد اللغات يحتاج وحدتين من 16 بت، وهما زوج بديل. ويرى القارئ محرفاً واحداً، فعدد المحارف واحد، بينما طول UTF-16 اثنان.
لماذا يستهلك النص التركي أو العربي رسائل SMS أكثر من النص الإنجليزي؟
الحروف ş وğ وı وİ وç وÇ، والحروف العربية، كلها خارج أبجدية GSM-7، فيكفي حرف واحد منها ليصبح الرسالة كلها بترميز UCS-2. ورسالة UCS-2 تتسع لـ 70 محرفاً بدل 160.
لماذا يكون عدد X أعلى من عدد المحارف الذي أراه؟
يحسب X الرموز التعبيرية ومحارف الصينية واليابانية والكورية بوزن اثنين، ويحسب كل رابط 23 محرفاً. والعدد المعروض هنا يتبع الأوزان نفسها.
هل حدود SMS وX دقيقة لكل شركة اتصالات أو منصة؟
هي تتبع المعيار وأوزان X المنشورة. وقد تقسّم شركة الاتصالات الرسالة أو تحسبها بطريقة أخرى، ولا تفحص الأداة الروابط المكتوبة بلا http أو https.
هل يُرسل نصي إلى أي مكان؟
لا. تُحسب الأعداد في متصفحك. لا يُحفظ النص ولا يُرسل إلى الموقع.
المصادر
- ويكيبيديا (باللغة الإنجليزية): SMS، أطوال الرسائل وأرقام 153 و67
- ويكيبيديا (باللغة الإنجليزية): GSM 03.38، جدولا GSM-7 الأساسي والموسّع
- 3GPP TS 23.038: Alphabets and language-specific information (باللغة الإنجليزية)
- ويكيبيديا (باللغة الإنجليزية): UTF-8، البايتات لكل نقطة ترميز
- ويكيبيديا (باللغة الإنجليزية): UTF-16، وحدات الترميز والأزواج البديلة
- ويكيبيديا (باللغة الإنجليزية): UTF-32، العرض الثابت
- Unicode UAX #29: تجزئة النص في يونيكود، العناقيد الحرفية (الإصدار 49) (باللغة الإنجليزية)
- X: حساب المحارف (طول المنشور وأوزانه) (باللغة الإنجليزية)
- twitter-text، config/v3.json: أوزان المحارف التي يستخدمها X (باللغة الإنجليزية)
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.