SoupCalc

Калькулятор длины строки: символы Unicode и байты UTF-8

Что рассчитывает этот инструмент

Калькулятор сообщает счёт, ориентированный на символы, основанный на кодовых точках Unicode, и счёт, ориентированный на хранение, основанный на байтах UTF-8. Внутренне проверенный вспомогательный модуль также различает кодовые единицы UTF-16, что объясняет, почему нативная длина строки JavaScript может отличаться от видимого результата для некоторых эмодзи и дополнительных символов.

«Символ» имеет несколько значений в вычислительной технике. Подсчёт кодовых точек более осведомлён о Unicode, чем подсчёт единиц UTF-16, но он всё ещё не всегда равен количеству графемных кластеров, воспринимаемых пользователем.

Входные данные

Введите или вставьте любой текст, включая пробелы, переносы строк, эмодзи, комбинирующие знаки и нелатинские письменности. Вычисление происходит в браузере и не требует отправки текста в сервис подсчёта длины.

Сохраняйте точные окончания строк, когда важен предел в байтах. Окончание строки Windows CRLF использует две кодовые точки и два байта UTF-8, тогда как окончание LF — одну. Нормализация Unicode также может изменить количество кодовых точек и байтов, не меняя видимого текста.

Метод и формула

Подсчёт кодовых точек итерирует строку по кодовым точкам Unicode, а не индексирует исходные единицы UTF-16. Счёт UTF-16 — это длина строки в кодовых единицах среды выполнения. Байтовый счёт кодирует строку как UTF-8 и подсчитывает получившиеся октеты.

Базовые символы ASCII используют одну единицу UTF-16 и один байт UTF-8. Многие акцентированные символы используют одну кодовую точку, но два байта UTF-8. Дополнительные эмодзи обычно используют одну кодовую точку, две кодовые единицы UTF-16 и четыре байта UTF-8.

Графема, такая как последовательность эмодзи, объединённая соединителями нулевой ширины, может содержать несколько кодовых точек, выглядя как один символ. Этот инструмент не применяет графемную сегментацию.

Практический пример

Введите A😀é.

  • Кодовые точки Unicode: A, 😀 и é, всего 3.
  • Кодовые единицы UTF-16: 1 для A, 2 для 😀 и 1 для é, всего 4.
  • Байты UTF-8: 1 для A, 4 для 😀 и 2 для é, всего 7.

Видимый калькулятор сообщает 3 символа и 7 байт. Документированное значение UTF-16, равное 4, объясняет, почему наивный подсчёт .length в JavaScript дал бы иной результат.

Как интерпретировать результат

Используйте кодовые точки при проверке протокола или правила данных, явно определённого в кодовых точках. Используйте байты UTF-8 для ограничений полезной нагрузки, базы данных или API, определённых в закодированных байтах. Ни то, ни другое не следует подменять ограничением, определённым в графемных кластерах, ширине отображения, сегментах SMS или глифах шрифта.

При установлении лимита продукта документируйте единицу и форму нормализации. Пользователь не должен терять текст только потому, что интерфейс говорит «символы», а серверная часть отклоняет байты.

Точность и ограничения

Байтовый подсчёт использует именно UTF-8; UTF-16, UTF-32, устаревшие кодировки, сжатие, экранирование, синтаксис JSON и транспортное обрамление имеют другие размеры. Инструмент не нормализует текст и не подсчитывает графемные кластеры, слова, строки, столбцы, глифы или отображаемую ширину.

Визуально идентичные строки могут иметь разные кодировки — например, предварительно составленная акцентированная буква по сравнению с базовой буквой плюс комбинирующий знак. Чувствительные к безопасности идентификаторы требуют документированной политики Unicode, выходящей за рамки одной длины.

Источники

  • Unicode Standard, Chapter 2: General Structure различает кодовые точки, формы кодирования и воспринимаемые пользователем текстовые элементы.
  • WHATWG Encoding Standard определяет поведение кодирования UTF-8, используемое современной обработкой текста на веб-платформе.

Редакционная запись

Автор: Редакционная группа SoupCalc

Дата последней проверки: 14 августа 2026 г.

Объём проверки: Итерация по кодовым точкам, поведение суррогатов UTF-16, кодирование UTF-8, ограничения графем, ссылки на стандарты и подсчёты 3, 4 и 7 для A😀é были проверены.