Проблема с «преобразованием» произвольного Unicode в ASCII заключается в том, что значение символа зависит от культуры. Например, «ß» для говорящего на немецком языке должно быть преобразовано в «ss», в то время как англоговорящий, вероятно, преобразует его в «B».
Добавьте к этому тот факт, что Unicode имеет несколько кодовых точек для одних и тех же глифов.
В результате единственный способ сделать это - создать массивную таблицу с каждым символом Unicode и символом ASCII, в который вы хотите преобразовать его. Вы можете использовать ярлык, нормализуя символы с акцентами в форме нормализации KD, но не все символы нормализуются к ASCII. Кроме того, Unicode не определяет, какие части глифа являются «акцентами».
Вот небольшая выдержка из приложения, которое делает это:
switch (c)
{
case 'A':
case '\u00C0': // À LATIN CAPITAL LETTER A WITH GRAVE
case '\u00C1': // Á LATIN CAPITAL LETTER A WITH ACUTE
case '\u00C2': // Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
// and so on for about 20 lines...
return "A";
break;
case '\u00C6':// Æ LATIN CAPITAL LIGATURE AE
return "AE";
break;
// And so on for pages...
}