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