как заменить диакритические знаки на обычные символы?

KitKat21

Client
Регистрация
02.05.2017
Сообщения
263
Благодарностей
191
Баллы
43
Всем привет!

Надеюсь, кто-нибудь сможет помочь.

В C#, как можно удалить диакритические знаки (такие как ÁÀÃÄÂ и т.д.) и заменить их на обычные буквы?
Например, чтобы превратить: Élena Ñunez Ütter в Elena Nunez Utter.

Я пробовала код от ИИ, код из интернета, ничего не работает.


Спасибо!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
Всем привет!

Надеюсь, кто-нибудь сможет помочь.

В C#, как можно удалить диакритические знаки (такие как ÁÀÃÄÂ и т.д.) и заменить их на обычные буквы?
Например, чтобы превратить: Élena Ñunez Ütter в Elena Nunez Utter.

Я пробовала код от ИИ, код из интернета, ничего не работает.


Спасибо!
В Зеннопостере есть транслитическая функция, настраиваемая через особый файл translit.csv в рабочей папке Зеннопостера, например у меня это папка: C:\Program Files\ZennoLab\RU\ZennoPoster Pro V7\7.7.16.0\Progs\Settings

Можете в файле translit.csv прописать любые нужные вам замены и пользоваться действием 'Данные - Обработка текста - Транслитерация'.

123702
 
  • Спасибо
Реакции: KitKat21

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 777
Благодарностей
1 447
Баллы
113
Всем привет!

Надеюсь, кто-нибудь сможет помочь.

В C#, как можно удалить диакритические знаки (такие как ÁÀÃÄÂ и т.д.) и заменить их на обычные буквы?
Например, чтобы превратить: Élena Ñunez Ütter в Elena Nunez Utter.

Я пробовала код от ИИ, код из интернета, ничего не работает.


Спасибо!
123704

C#:
string input = project.Variables["Text"].Value; // В переменной Text значение Élena Ñunez Ütter

string normalizedText = input.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();

foreach (char c in normalizedText)
{
    System.Globalization.UnicodeCategory uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c);
    if (uc != System.Globalization.UnicodeCategory.NonSpacingMark)
    {
        sb.Append(c);
    }
}
string output = sb.ToString().Normalize(NormalizationForm.FormC);
project.Variables["result"].Value = output; // В переменной result появится результат: Elena Nunez Utter
project.SendInfoToLog(output, true); // выводим результат в лог
 
  • Спасибо
Реакции: Sergodjan, KitKat21 и Nord

KitKat21

Client
Регистрация
02.05.2017
Сообщения
263
Благодарностей
191
Баллы
43
Посмотреть вложение 123704

C#:
string input = project.Variables["Text"].Value; // В переменной Text значение Élena Ñunez Ütter

string normalizedText = input.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();

foreach (char c in normalizedText)
{
    System.Globalization.UnicodeCategory uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c);
    if (uc != System.Globalization.UnicodeCategory.NonSpacingMark)
    {
        sb.Append(c);
    }
}
string output = sb.ToString().Normalize(NormalizationForm.FormC);
project.Variables["result"].Value = output; // В переменной result появится результат: Elena Nunez Utter
project.SendInfoToLog(output, true); // выводим результат в лог
Спасибо большое за ваше время и за написание этого кода для меня!))
Он работает отлично. Решил мои проблемы!

Однако, C# не обрабатывает несколько редких символов: "Ŧ; ŧ; T; t; Ƞ; ƞ; Ł; ł; Đ; đ; Ð; ð". Поэтому я обнаружил, что когда я использую метод Transliterate после C#, он справляется с этими проблемными символами. Метод Transliterate не обрабатывает множество других типов символов (b̌; ć; c̈; c̃; d̈; d̃; ď; f̌) и иногда не справляется при попытке обработать заглавную É, поэтому два метода вместе — идеальное решение.
 
  • Спасибо
Реакции: Sergodjan

KitKat21

Client
Регистрация
02.05.2017
Сообщения
263
Благодарностей
191
Баллы
43
В Зеннопостере есть транслитическая функция, настраиваемая через особый файл translit.csv в рабочей папке Зеннопостера, например у меня это папка: C:\Program Files\ZennoLab\RU\ZennoPoster Pro V7\7.7.16.0\Progs\Settings

Можете в файле translit.csv прописать любые нужные вам замены и пользоваться действием 'Данные - Обработка текста - Транслитерация'.

Посмотреть вложение 123702
Спасибо за совет! Я не знал об этой функции. Она очень полезна.

Я добавил все возможные символы, но обнаружил, что некоторые из моего списка все еще не обрабатываются, и почему-то заглавная буква É вызывает проблемы. Я использую предоставленный в C# код samsonnn вместе с этим методом для обработки оставшихся символов.

Это решило мою проблему, спасибо!
 
  • Спасибо
Реакции: samsonnn и Sergodjan

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)