Если нужно много и часто сравнивать UTF-8 символы с UNICODE символами, то я бы поступил следующим образом в зависимости от особенностей задачи:
1. Если нужно оставить только символы рус-лат-цифры-препинания, то берем нужные нам UNICODE таблицы с этой страницы
www.unicode.org/charts/
(в частности:
Некоторые символы
www.unicode.org/charts/PDF/U2100.pdf
Кириллические символы
www.unicode.org/charts/PDF/U0400.pdf,
www.unicode.org/charts/PDF/U0500.pdf
Знаки препинания
www.unicode.org/charts/PDF/U2000.pdf
И еще пунктуация
www.unicode.org/charts/PDF/U0080.pdf)
И заранее пересчитываем UNICODE коды из этих таблиц в массив UTF-8 символовПравила перекодировки UNICODE в UTF-8 можно посмотреть тут
en.wikipedia.org/wiki/UTF-8
Bits Last code point Byte 1
7 U+007F 0xxxxxxx
Bits Last code point Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
7 U+007F 0xxxxxxx
11 U+07FF 110xxxxx 10xxxxxx
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
21 U+1FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
26 U+3FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
31 U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Для тренировки можно взять Word и нажать Alt-X после символа, отобразится его UNICODE значение. Итак, для нашей буквы «Номер» UNICODE значение 2116 (Hex).
Это значение подпадает под правило (битовая маска) U+FFFF
1110xxxx
10xxxxxx
10xxxxxx
При помощи calc преобразуем 2116 (Hex) в двоичный вид 10000100010110 (Bin).
Вставляем наши биты в маску U+FFFF
1110[0010]
10[000100]
10[010110]
Полученное число запихиваем снова в calc 111000101000010010010110 и получаем E28496 hex, это и есть искомый код нашего символа в UTF-8.
получая таким образом список
желаемых символов. Далее, при обработке текста, проверяем его символы с этим набором — если символ нашелся в этом массиве, значит он нам нужен. Если не попал, то — свободен (по-началу нужно будет проверить, все ли требуемые символы мы учли)
2. Второй вариант отличается от первого тем, что мы берем список
нежелаемых символов и заносим их в аналогичный список, с которым сравниваем символы из наших страниц — если символ попал в этот список, значит он нам не нужен. Все не попавшие символы считаем хорошими.
Список символов нужно оформить в виде ассоциативного массива, где в качестве ключа выступает UTF-8 код, а в качестве значения true или false. В этом случае проверка очередного символа из текста будет почти мгновенной — просто проверить значение массива по ключу.