Как заменить специальные символы их эквивалентом (такие как “а” для) в C#?

Я должен вытащить португальское текстовое содержание из файла Excel и создать xml, который будет используемым приложением, которое не поддерживает символы, такие как "ç", "á", "é", и другие. И я не могу только удалить символы, но заменить их их эквивалентом ("c", "a", "e", например).

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

11
задан animuson 4 May 2012 в 18:55
поделиться

3 ответа

Вы можете попробовать что-то вроде

var decomposed = "áéö".Normalize(NormalizationForm.FormD);
var filtered = decomposed.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark);
var newString = new String(filtered.ToArray());

Это разлагает акценты из текста, фильтрует их и создает новую строку. Комбинированные диакритические знаки находятся в категории Непробельные знаки юникода.

23
ответ дан 3 December 2019 в 03:18
поделиться
string text = {text to replace characters in};

Dictionary<char, char> replacements = new Dictionary<char, char>();

// add your characters to the replacements dictionary, 
// key: char to replace
// value: replacement char

replacements.Add('ç', 'c');
...

System.Text.StringBuilder replaced = new System.Text.StringBuilder();
for (int i = 0; i < text.Length; i++)
{
    char character = text[i];
    if (replacements.ContainsKey(character))
    {
        replaced.Append(replacements[character]);
    }
    else
    {
        replaced.Append(character);
    }
}

// 'replaced' is now your converted text
3
ответ дан 3 December 2019 в 03:18
поделиться

Для дальнейшего использования, это именно то, что я получил:

temp = stringToConvert.Normalize(NormalizationForm.FormD);
            IEnumerable<char> filtered = temp;
            filtered = filtered.Where(c => char.GetUnicodeCategory(c) != System.Globalization.UnicodeCategory.NonSpacingMark);
            final = new string(filtered.ToArray());
2
ответ дан 3 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: