Я пишу программу на C для поиска большого количества строк UTF-8 в базе данных. Некоторые из этих строк содержат английские символы с дидактикой, например, ударения и т. Д. Строка поиска вводится пользователем, поэтому, скорее всего, она не будет содержать такие символы. Есть ли способ (функция, библиотека и т. Д.), Который может удалить эти символы из строки или просто выполнить нечувствительный к дидактике поиск? Например, если пользователь вводит строку поиска «motor», она должна соответствовать строке «motörhead».
Моей первой попыткой было вручную исключить описанные здесь дидактические модификаторы:
http://en.wikipedia.org/wiki/Combining_character
В некоторых случаях это работало, но оказалось, что многие из этих символов также имеют определенные значения Unicode. Например, символ «ö» выше может быть представлен как «o», за которым следует дидактическое объединение U + 0308, но он также может быть представлен одним символом юникода U + 00F6, а мой метод фильтрует только первый.
Я также посмотрел на iconv, который может конвертировать из UTF8 в ASCII. Однако я могу захотеть локализовать свою программу в будущем, и это, несомненно, вызовет проблемы для языков с неанглийскими символами. Есть ли способ, которым я могу просто раздеть / преобразовать эти акцентированные символы?
Редактировать: удалена опечатка в заголовке вопроса.