Що це за інструмент?
Для звичайного тексту ASCII (англійських літер, цифр, базової пунктуації) кількість символів і кількість байтів збігаються — кожен символ у кодуванні UTF-8 займає рівно один байт. Щойно текст містить літери з діакритичними знаками, китайські/японські/корейські ієрогліфи, кирилицю, арабське письмо, емодзі чи більшість інших символів поза ASCII, це перестає бути правдою: один символ може займати 2, 3 або 4 байти в UTF-8 і 2 або 4 байти в UTF-16.
Це має значення щоразу, коли система має обмеження саме за байтами, а не за символами — SMS-повідомлення, розмір стовпців у базах даних, обмеження розміру корисного навантаження API та деякі соціальні платформи вимірюють саме байти, а не символи, тож той самий фрагмент тексту може непомітно перевищити ліміт залежно від мови чи символів, які він містить.
Навіщо його використовувати?
- Показує кількість символів, байти UTF-8 та байти UTF-16 поруч одне з одним.
- Правильно рахує емодзі та інші символи поза базовою багатомовною площиною (Basic Multilingual Plane) як один символ, а не два.
- Оновлюється в реальному часі під час набору — не потрібно натискати жодну кнопку.
- Працює повністю у вашому браузері — без завантаження на сервер.
- Безкоштовно, без реєстрації, без обмежень.
Як користуватися
- Введіть або вставте текст у поле.
- Прочитайте кількість символів, кількість байтів UTF-8 та кількість байтів UTF-16 під ним — вони оновлюються під час набору.
Приклад
Введення
Hello, 世界! 🌍Результат
12 символів, 19 байтів UTF-8, 26 байтів UTF-16Частина ASCII ("Hello, " та "! ") займає 1 байт на символ у кодуванні UTF-8. Кожен китайський ієрогліф займає 3 байти, а емодзі — 4 байти, тому кількість байтів помітно перевищує кількість символів.
Поширені випадки використання
- Перевірка, чи вміститься багатомовний опис товару в стовпець бази даних, обмежений довжиною в байтах, а не кількістю символів.
- Оцінка кількості SMS-сегментів, оскільки SMS тарифікуються та діляться за розміром у байтах, а текст не латинською абеткою має інше обмеження на сегмент.
- Перевірка того, що корисне навантаження API або поле форми не перевищує обмеження розміру в байтах перед надсиланням.
- Розуміння того, чому рядок, який "виглядає коротким", відхиляється системою через перевірку довжини на основі байтів.
Часті запитання
Чому кількість символів і кількість байтів не збігаються?
Текст у Unicode зберігається у вигляді байтів, і скільки байтів потрібно кожному символу, залежить від кодування та самого символу. У UTF-8 символи ASCII займають 1 байт, більшість латинських літер з діакритичними знаками, а також кирилиця, грецькі, івритські й арабські літери займають 2 байти, більшість ієрогліфів CJK займають 3 байти, а емодзі зазвичай займають 4 байти. Кількість символів просто рахує знаки, не зважаючи на те, як вони зберігаються.
Яку кількість байтів використовувати для поля з обмеженням у байтах?
Використовуйте те кодування, яке система справді застосовує для зберігання чи передачі тексту — більшість сучасних веб-API, баз даних і файлів використовують UTF-8, тож зазвичай актуальною є саме кількість байтів UTF-8. Деякі старіші системи (наприклад, внутрішня обробка рядків у Windows/Java) використовують UTF-16.
Чи правильно цей інструмент рахує емодзі?
Так. Багато емодзі внутрішньо зберігаються як пара "сурогатних" кодових одиниць UTF-16, які наївні методи підрахунку рахують як 2 символи. Цей інструмент коректно рахує кодові точки Unicode, тож емодзі рахується як 1 символ — відповідно до того, скільки символів людина фактично бачить.
Це те саме, що інструмент Лічильник слів?
Ні — Лічильник слів зосереджений на кількості слів і речень для потреб письма. Цей інструмент саме про розмір у байтах порівняно з кількістю символів, що важливо для технічних обмежень, а не для вимог щодо кількості слів.
Чи завантажується мій текст кудись?
Ні. Підрахунок відбувається локально у вашому браузері за допомогою вбудованого кодувальника тексту JavaScript; нічого не надсилається на сервер.