"Why does "👩🏾‍🌾" have a length of 7 in #JavaScript?"

A very nice analyse! 

#utf16 #unicode
by @EvanHahn
https://evanhahn.com/javascript-string-lengths/

Why does "👩🏾‍🌾" have a length of 7 in JavaScript?

👩🏾‍🌾 is made up of 1 grapheme cluster, 4 scalars, and 7 UTF-16 code units.

Ну всё, пора закапывать UTF-8

Здравствуйте, меня зовут Дмитрий Карловский и я... серийный убийца устоявшихся стандартов. Сегодня я выследил и нанёс критический урон UTF-8. И сейчас я расскажу, как я его переиграл и уничтожил новым стандартом кодирования текста — Unicode Compact Format . No, God! Please, No, NO!

https://habr.com/ru/articles/983042/

#utf8 #utf16 #utf32 #ucs2 #ucs4 #scsu #bocu1 #utfc #ucf #$mol

Ну всё, пора закапывать UTF-8

Здравствуйте, меня зовут Дмитрий Карловский и я... серийный убийца устоявшихся стандартов. Сегодня я выследил и нанёс критический урон UTF-8. И сейчас я расскажу, как я его переиграл и уничтожил новым...

Хабр
UTF-8 is everywhere in modern software. Unfortunately, clear explanations of how it works and why it matters are quite rare, even if those should really be part of every "intro to programming" course. Most courses just deal with text processing by saying "here is the ASCII table, every letter is mapped to 1 byte, and texts are just arrays of letters" like we're stuck in the 90's.

This is the best explanation I've seen about #UTF8, #UTF16 and #Unicode: https://youtube.com/watch?v=vpSkBV5vydg . I highly recommend watching it if you write software but still have doubts about how "💩" is represented in memory.

#computerprogramming #programming #compsci #learnprogramming #emoji #emojis #emoticon
UTF-8, Explained Simply

YouTube

[Перевод] Освоение Unicode в Java: создаём на Quarkus REST API, готовый к глобальной аудитории

В этом руководстве мы разберем непонятности вокруг Unicode и узнаем, как строить надёжные, интернациональные Java-приложения. Разберём теорию, укажем на подводные камни, а затем соберём «Глобальный сервис приветствий» на Quarkus, который переживёт весь хаос реального текста. К концу статьи вы разберётесь с тем, – как устроен Unicode и как Java на самом деле хранит текст; – почему длина строки и перебор символов сложнее, чем кажется; – как нормализация предотвращает неприятные несоответствия; – как настроить REST-сервис и базу данных для безопасной работы с Unicode. Unicode без боли

https://habr.com/ru/companies/otus/articles/956720/

#unicode #Quarkus #Java #UTF8 #UTF16 #графемные_кластеры #нормализация #nfc #сортировка_по_локали

Освоение Unicode в Java: создаём на Quarkus REST API, готовый к глобальной аудитории

От скрытых ловушек со строками до эндпоинтов, корректно обрабатывающих эмодзи — разберёмся, как корректно работать с текстом в современных Java-приложениях. Большинство разработчиков на Java печатали...

Хабр
How a Single ß Can Break Everything
Friday, September 26, 2025 14:45 GMT+02:00, Dependency Den
https://developer.android.com/reference/android/icu/text/BreakIterator
#unicode #utf8 #utf16 #droidcon #dcbln25 #fahrplan @droidcon

#Development #Techniques
Text lengths with ‘Intl.Segmenter’ API · Human-friendly character counting in JavaScript https://ilo.im/166lco

_____
#Characters IntlSegmenter #API #JavaScript #Unicode #UTF8 #UTF16 #Browser #WebDev #Frontend

Accurate text lengths with `Intl.Segmenter` API

How many characters is 👨‍👩‍👧‍👦?

Automagic

Всё же пришлось поизучать юникод.

Два четырёхзначных кодпоинта могут идти в суррогатной паре UTF-16, тогда декодировать их можно только вместе (там какой-то алгоритм с битовыми операциями).
То есть мне нужно обрабатывать такую ситуацию, когда в буфер попал первый кодпоинт из пары, без второго, и слать декодеру часть буфера до начала этой сломанной пары.
Иначе декодер выдаст не то. Склеивать полученные байты не поможет.

Пример: \u1F4AF — это эмоджи [💯]
В жсоне для кодирования юникода применяется UTF-16-BE, видимо чтобы количество цифр в кодпоинте всегда было 4 для удобства парсинга (удобства!! спасибо, блин).
Получаем "\ud83d\udcaf".
\ud83d — первый символ в суррогатной паре, leading UTF-16 surrogate, его можно определить по диапазону от 0xD800 до 0xDBFF включительно.
\udcaf — второй символ в паре, trailing UTF-16 surrogate, диапазон от 0xDC00 до 0xDFFF включительно.

Если парсер смог прочитать только первый кодпоинт 0xD83D и дошёл до конца буфера, значит, trailing surrogate мы не считали, декодировать кодпоинт не получится. Вернём его обратно к вызывающему (см. переменную leftovers), чтобы он добавил кривой жсон-эскейп с этим кодпоинтом в буфер в следующий раз, когда будет читать байты дальше. А щас декодируем только часть строки до \ud83d, не захватывая этот эскейп.

Багфикс:
https://git.dc09.ru/DarkCat09/proxishot/commit/e4873223f5

Разговор с самим собой:
https://git.dc09.ru/DarkCat09/proxishot/issues/1

#unicode #utf16 #json #parser

fix(json): reject utf-16 surrogates · e4873223f5

Closes #1

Forgejo
The grumpy serialisation format

Every few years we reinvent data serialisation. CDR (CORBA) replaced EDI, and was replaced by XML, and now, clearly JSON is the solution, while ASN.1 still lurks in the shadows. And then it stuck m…

Thias の blog

Imutin kaikki #Facebook'in julkaisuni – ainakin jos #Meta'a uskotaan. Pyysin #JSON-muodossa toivossa, että tulisi sutjakammin. Hieman ongelmia aiheutti JSONin koodaus: merkkijonot ovat validia #UTF8:aa mutta JSON ilmeisesti olettaa #UTF16:n, joten vaaditaan mukamuunnos eestaas; apua löytyi #StackOverflow’sta. Aikaleimat sentään olivat standardi-#POSIX’ia.

En tiedä, kuinka täydellinen ”arkisto” on, mutta ainakin jotakin saisi talteen, kun lähtee lätkimään. #some #atkjuttuja