Усі статті

Text Reverse: чому «перевернути текст» складніше, ніж здається

«Перевернути текст» звучить як найпростіша можлива операція — просто виведи символи у зворотному порядку. Але наївна реалізація по кодових точках Unicode ламається на емодзі, символах з діакритикою та деяких інших не-латинських текстах.

Що таке графемний кластер

Те, що людина сприймає як «один видимий символ», у Unicode іноді складається з кількох кодових точок — наприклад, емодзі родини (👨‍👩‍👧) — це фактично кілька окремих емодзі, з’єднаних спеціальним символом-з’єднувачем (zero-width joiner). Таку комбінацію називають графемним кластером.

Чому наївний реверс усе ламає

Якщо перевернути рядок по окремих кодових точках, а не по графемних кластерах, з’єднувач опиниться не на своєму місці, і замість одного видимого емодзі вийде набір окремих, непов’язаних символів — часто це виглядає як «зламані» квадратики чи випадкові емодзі замість початкового.

Коректний реверс

Правильна реалізація спершу розбиває рядок на графемні кластери (враховуючи з’єднувачі, модифікатори та комбінувальні символи), а вже потім змінює порядок цих кластерів, а не окремих кодових точок усередині них.

Навіщо це потрібно

  • Перевірити паліндром чи створити текстовий ефект «дзеркального» тексту.
  • Продемонструвати або продіагностувати проблему з обробкою Unicode в коді.
  • Розважальні чи навчальні задачі, де потрібен коректний реверс тексту з емодзі.

Комбінувальні діакритичні знаки

Символ «é», записаний як базова літера «e» плюс окремий комбінувальний акутовий наголос, — це два кодових точки, пов’язані порядком: наголос завжди йде одразу після символу, до якого стосується. Наївний реверс по кодових точках поміняє їх місцями, і наголос «відклеїться» від своєї літери та прикріпиться до сусідньої — коректний реверс має тримати базовий символ і його комбінувальні знаки разом як одну одиницю.

Спробувати інструмент