Почему нормализованные строки в JS не подходят для отображения пользователю?
Здравствуйте.
Прочитал, что для сравнения и поиска строки нужно нормализовывать - это понятно, а вот почему они не подходят для отображения пользователю - загадка.
И ещё, всегда интересовало, но всегда забывал спросить: почему в index.html всегда(почти всегда) указываем UTF8, а в то же время везде указывается, что строки JS - это UTF16
Что значит нормализовывать?
в index.html кодировка указывается для самого файла, чтобы браузер его понял правильно. Вы можете там поставить хоть cp-1251.
а строки js - это UTF16 в памяти во время работы.
Чтобы визуально и в коде число букавок было равно, просто в юникоде можно букву представить через 4 байта либо через больше. Собсно в наших реалиях это проблема всплыла с появлением эмодзи(там на самом деле может быть и от 4/8 до овердохрена, хотя эмодзи один), так же как и другие, навроде того что в mysql utf8 на самом деле трехбайтный и т.п., в общем это отдельная боль. Ну то есть если например есть поле пароль до 8 символов, то если баба вколбасит туда эмодзи собаки, то у не отобразится одна скрытая точка, но валидацию не пройдет, потому что длина строки 10 символов, а если нет валидации и баба сохранит, а на бэке mysql не заточенная под это, то база упадет.
для этого я специально оговорил, предвидя подобный ответ
всегда(почти всегда) указываем UTF8,
чтобы разговор не свернул в сторону, а у арабов или на поленезийских островах, да что там Полинезия, вот остров Пасхи и калахарские бушмены...
а строки js - это UTF16 в памяти во время работы.
а когда вы указываете <span>{variable: string}</span>
вы указываете что-то другое, не строки JS из памяти?
_____________________________________________________________________________
Чтобы визуально и в коде число букавок было равно, просто в юникоде можно букву представить через 4 байта либо через больше.
не понял мысль. При изучении Си всё начинается с ASCII, там всё ясно 128 заняты, а дальше регионально.
Один байт = 2^8 = 256 возможных вариантов и пошло-поехало, 2байта =16 бит = 2^65536 с этим и всё понятно. Не понятно в результате как это работает...
Вот из вики
UTF-8 (от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит»)
8 бит! )) Как хочешь, так и понимай...
Надо почитать тогда на эту тему. Я полагал, что сейчас на пальцах объяснят, ведь вроде объяснить как множество цифр (256, 65536, ...) отображается во множество символов - задача элементарная, а получается, что нет... Без претензий к участникам дискуссии.
Ostic, при чем тут остров пасхи, строки в JS и строки в html - совершенно разные строки. Перечитайте мой ответ еще раз, вы не поняли о чем я говорю. То что в html стоит utf-8 не имеет никакого значения. Там может быть что угодно. Из этого чего угодно браузер сформирует потом utf-16 строки в памяти если у вас будет что-то вроде
const x="люблю поспорить когда мне отвечают на мой вопрос"
вы указываете что-то другое, не строки JS из памяти?
Именно, вы пишете строку из латинских символов в кодировке заданной для данного html файла.
У вас там может опять же что угодно и совсем не в utf-8.
То что браузер будет делать с этой строкой и как он сформирует html-документ из того что есть в переменных в движке JS - это уже другой вопрос.
Пример который вы привели - вообще никаким боком к JS не относится, но предположим что там на самом деле кусок JS кода.