Преобразование символов, букв Accent в английский алфавит - PullRequest
123 голосов
/ 17 июня 2009

Проблема в том, что, как вы знаете, в диаграмме Unicode есть тысячи символов , и я хочу преобразовать все подобные символы в буквы английского алфавита.

Например, вот несколько преобразований:

ҥ->H
Ѷ->V
Ȳ->Y
Ǭ->O
Ƈ->C
tђє Ŧค๓เℓy --> the Family
...

и я увидел, что существует более 20 версий буквы A / a. и я не знаю, как их классифицировать. Они похожи на иголки в стоге сена.

Полный список символов Unicode: http://www.ssec.wisc.edu/~tomw/java/unicode.html или http://unicode.org/charts/charindex.html. Просто попробуйте прокрутить вниз и посмотреть варианты букв.

Как я могу конвертировать все это с Java? Пожалуйста, помогите мне: (

Ответы [ 12 ]

4 голосов
/ 17 июня 2009

Проблема с «преобразованием» произвольного 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...
}
2 голосов
/ 26 июня 2017

Следующий класс делает свое дело:

org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilter
...