Найдите подобный символ ASCII в Unicode

Делает кто-то знает простой способ найти символы в Unicode, которые подобны символам ASCII. Примером является "КИРИЛЛИЧЕСКАЯ СТРОЧНАЯ БУКВА DZE (ѕ)". Я хотел бы сделать поиск и замену для подобных символов. Подобным я имею в виду человекочитаемый. Вы не видите различия путем рассмотрения его.

8
задан Nietzche-jou 4 August 2010 в 09:29
поделиться

2 ответа

Как отмечают другие комментаторы, Нормализация Unicode («символы совместимости») здесь не поможет, поскольку вы ищете не официальные эквиваленты, а сходство в глифах (формах букв). (Тем не менее, связанный Технический отчет Unicode по-прежнему стоит прочитать, поскольку он очень хорошо написан.)

На вашем месте, чтобы избавить вас от утомительной работы по составлению списка символов самостоятельно, я бы поискал ресурсы по Атаки омографа : это метод злонамеренного введения в заблуждение пользователей Интернета путем отображения URL-адресов, содержащих доменные имена, в которых некоторые буквы были заменены визуально похожими буквами. Другой Технический отчет Unicode , посвященный безопасности, содержит раздел, посвященный проблеме. Также есть - и это может быть то, что вам больше всего нужно - таблица "confusables" . Вот еще одна статья, в которой в основном используются знаки препинания, некоторые из которых ASCII, которые имеют визуально похожие аналоги в таблицах кодов, отличных от ASCII .

Я действительно надеюсь, что вы не задаете вопрос для построения такой атаки.

12
ответ дан 5 December 2019 в 17:33
поделиться

См. базу данных Юникода: 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

который, как вы видите, не указывает символ совместимости.

-2
ответ дан 5 December 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: