Мне нужно отобразить счетчик целых чисел на удобные для URI кодовые точки Unicode (я пишу сокращающий URL-адрес, не ограниченный типичным ASCII base-62, 0-9a-zA-Z
).У меня уже есть опытный образец;веб-сервер получает GET-запросы на кодированное в% значение UTF-8 кодовой точки Unicode (во всяком случае, от Firefox), поэтому его очень легко обрабатывать.
Теперь трудная часть, которую я достигпреобразует первичный ключ сокращаемого URL - целое число - в пригодные для использования кодовые точки Unicode (код точек , для которых, когда я превышаю число отдельных кодовых точек, я могуиспользовать и использовать несколько кодов).Прямо сейчас мой счетчик иногда создает неверные кодовые точки, которые нельзя использовать.Я немного прочитал об Unicode и понимаю, что нужно учитывать множество вещей:
- Не отображаемые символы
- Нехарактерные символы
- Контролькоды
- Высокие / Низкие суррогаты
- Частные кодовые точки
- Форматирование, символы биди
- Объединение символов / диакритических знаков
- Пробелы
- Дублирующиеся / повторяющиеся символы
- Зарезервированная URI-схема символов, например
/
, +
, .
, ?
(не Unicode)
Мое простое решение состоит в том, чтобы создать набор кодовых точек для сопоставления с максимально возможным количеством используемых, избегая диапазонов «плохих символов», указанных выше, а такжекак включающие только кодовые точки, которые сами по себе также являются границами кластера графем , то есть не изменяемыми путем комбинирования символов / диакритических знаков (хотя я полагаю, если я добавлю в черный список диакритические кодовые точки, это не имеет значения).Это справедливое предположение?Есть ли относительно простой способ создать такой набор кодов?
Я видел ссылки на такие инструменты, как unichars и uniprops , но я не знаюМне кажется, я понимаю свойства Unicode достаточно, чтобы понять, помогут ли они мне в этой ситуации или нет.Я не заинтересован в полном исчерпывающем списке используемых кодовых точек, но охват> 70% был бы потрясающим.Я гораздо более заинтересован в том, чтобы скрыть «плохие» кодовые точки.
Еще одна проблема, которая меня интересует, заключается в том, являются ли зарезервированные кодовые точки и / или выделенные кодовые точки без отображаемых представлений (которые выглядят как прямоугольные прямоугольникис шестнадцатеричным значением внутри) также должны быть отфильтрованы.Как ни странно, они, кажется, работают, поэтому я планирую оставить их. Любая веская причина не делать этого?
Заранее извиняюсь, если моя терминология Unicode неверна.
TL; DR
Как я могу сгенерировать набор всех отображаемых кодовых точек Unicode (без кодовых точек управления / форматирования), , за исключением пробелов, повторяющихся / повторяющихся символов и комбинирование символов / диакритических знаков?