"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?"
A very nice analyse!
#utf16 #unicode
by @EvanHahn
https://evanhahn.com/javascript-string-lengths/
Ну всё, пора закапывать 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
Text, strings and Unicode
https://fed.brid.gy/r/https://eclecticlight.co/2026/01/03/text-strings-and-unicode/

[Перевод] Освоение 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 #сортировка_по_локали
#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
Всё же пришлось поизучать юникод.
Два четырёхзначных кодпоинта могут идти в суррогатной паре 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
The grumpy serialisation format
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