Делает кто-то знает простой способ найти символы в Unicode, которые подобны символам ASCII. Примером является "КИРИЛЛИЧЕСКАЯ СТРОЧНАЯ БУКВА DZE (ѕ)". Я хотел бы сделать поиск и замену для подобных символов. Подобным я имею в виду человекочитаемый. Вы не видите различия путем рассмотрения его.
Как отмечают другие комментаторы, Нормализация Unicode («символы совместимости») здесь не поможет, поскольку вы ищете не официальные эквиваленты, а сходство в глифах (формах букв). (Тем не менее, связанный Технический отчет Unicode по-прежнему стоит прочитать, поскольку он очень хорошо написан.)
На вашем месте, чтобы избавить вас от утомительной работы по составлению списка символов самостоятельно, я бы поискал ресурсы по Атаки омографа : это метод злонамеренного введения в заблуждение пользователей Интернета путем отображения URL-адресов, содержащих доменные имена, в которых некоторые буквы были заменены визуально похожими буквами. Другой Технический отчет Unicode , посвященный безопасности, содержит раздел, посвященный проблеме. Также есть - и это может быть то, что вам больше всего нужно - таблица "confusables" . Вот еще одна статья, в которой в основном используются знаки препинания, некоторые из которых ASCII, которые имеют визуально похожие аналоги в таблицах кодов, отличных от ASCII .
Я действительно надеюсь, что вы не задаете вопрос для построения такой атаки.
См. базу данных Юникода: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
Каждая строка описывает юникодовский кахарактер, например:
1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
Если для этого символа есть похожие (совместимые) символы, они появятся в поле
записи. В данном примере 0061
(ASCII a
) совместим с LATIN SMALL LETTER A WITH RIGHT HALF RING
символом Unicode.
Что касается вашего символа, то в записи стоит
0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
который, как вы видите, не указывает символ совместимости.