如何用C#中的等效字符替换特殊字符(例如“á”代替“a”)?

时间:2010-03-06 19:50:00

标签: c# string unicode encoding character

我需要从Excel文件中获取葡萄牙语文本内容并创建一个xml,它将由不支持“ç”,“á”,“é”等字符的应用程序使用其他。而且我不能只删除字符,而是用等效字符替换它们(例如“c”,“a”,“e”)。

我认为有一种更好的方法,而不是单独检查每个角色并将其替换为对应物。有关如何做的任何建议吗?

4 个答案:

答案 0 :(得分:21)

您可以尝试类似

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

这会分解文本中的重音,过滤它们并创建一个新字符串。组合变音符号属于Non spacing mark unicode类别。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

为了将来参考,这正是我最终的结果:

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());

答案 3 :(得分:0)

使用此解决方案可以提高效果:

string test = "áéíóúç";

string result = Regex.Replace(test .Normalize(NormalizationForm.FormD), "[^A-Za-z| ]", string.empty);