Найти похожий символ ASCII в Юникоде - PullRequest
7 голосов
/ 04 августа 2010

Кто-нибудь знает простой способ найти символы в Unicode, которые похожи на символы ASCII.Примером является " кириллическое маленькое письмо DZE (с)".Я хотел бы сделать поиск и заменить похожих персонажей.Под подобным я имею в виду человека, читаемого.Вы не можете увидеть разницу, глядя на это.

Ответы [ 2 ]

12 голосов
/ 04 августа 2010

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

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

Я надеюсь, что вы не задаете вопрос, чтобы построить такую ​​атаку.

0 голосов
/ 04 августа 2010

См. Базу данных Unicode: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.

Каждая строка описывает символ Unicode, например:

1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;

Если для этого символа есть похожие (совместимые) символы, он будетпоявляются в поле <compat> записи.В этом примере 0061 (ASCII a) совместим с символом LATIN SMALL LETTER A WITH RIGHT HALF RING Unicode.

Что касается вашего персонажа, запись будет

0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405

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

...