Казалось бы, прогеру не нужно знать все эти UTF — но… 1) ОЧЕНЬ многие языки разрабатывались, когда символ был 16-битным; 2) 8-битная обработка экономит ресурсы, а 32-битная — избыточна. Приходится, млин, всё это помнить, и всё, что остаётся — разрабатывать какие-нибудь итераторы, которые получают символ или говорят: дрянь попалась.
Супер, «странный UTF-16» нормально перекодировало в UTF-8. Остаётся только вон той функцией заполучить их 32-битные коды, и в случае выпадения false (символ неверный или из пользовательского дипазона) или какого-нибудь символа из наших диапазонов бить тревогу.
Ну и насчёт диапазонов, которые надо резать скопом.
2B00…2BFF Большая куча стрел (простые сюда не входят)
2600…26FF Разные символы (в т.ч. астрологические, химические, туристские)
2700…27BF Картинки
1F300–1F5FF Здоровая подборка картинок (тут и наш помидор)
1F600…1F64F Смайлики
1F650…1F67F Типографские украшения
1F680…1F6FF Туристские символы
1F900…1F9FF Куча картинок, пока не заполненная
В общем, на JSON-исходнике не надо ничего пытаться делать.
На PHP — надо, во-первых, смотреть, во что эта бяка перекодировалась. А она могла перекодироваться либо в настоящий UTF-8, либо в два суррогатных символа, закодированных в UTF-8, либо остаться символами экранирования.
Это тоже надо проверить.
А затем — написать функцию, которая разбивает строчку на кодовые позиции. Для UTF-8 вот она. https://habrahabr.ru/post/113715/
А потом уж смотрим, что делать с номерами символов.
s14e: Что, код настолько критичен, что нужна оптимизация?
1. const char* InStr — этого хватит. На худой конец const std::string& InStr.
2. result[i] = unsigned char(InStr[i] ^ key[ i & KEY_LEN_MASK] ^ i);
KEY_LEN_MASK = 15, разумеется.
Narical: Значит, критическая масса надмозгов уже появилась и сделала термин устоявшимся. И это не единственное — меня коробит, например, «сборка мусора» при нормативном «сбор мусора».
MiiNiPaa: Ну да, ежу понятно. Для этого и придумали шаблон «pimpl» = «pointer to implementation».
Но это ему сейчас не надо. Пусть мужук соберёт проект из двух файлов и убедится, что всё линкуется…