字符串替换C#中的变音符号

我想使用此方法来创建用户友好的URL。 因为我的网站是克罗地亚语,所以有些字符我不想剥离,而是用另一个字符替换它们。 例如,这个字符串:
ŠĐĆŽšđčćž
需要是:sdccz-sdccz

所以,我想制作两个数组,一个包含要替换的字符,另一个包含替换字符的数组:

string[] character = { "Š", "Đ", "Č", "Ć", "Ž", "š", "đ", "č", "ć", "ž" }; string[] characterReplace = { "s", "d", "c", "c", "z", "s", "d", "c", "c", "z" }; 

最后,这两个数组应该用在一些方法中,它将获取字符串,查找匹配并替换它们。 在php中我用preg_replace函数来处理这个问题。 在C#中,这不起作用:

 s = Regex.Replace(s, character, characterReplace); 

如果有人能提供帮助,我将不胜 谢谢

看来你想剥掉变音符号并留下基本字符。 我在这里推荐Ben Lings的解决方案 :

 string input = "ŠĐĆŽ šđčćž"; string decomposed = input.Normalize(NormalizationForm.FormD); char[] filtered = decomposed .Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark) .ToArray(); string newString = new String(filtered); 

编辑:轻微的问题! 它不适用于Đ。 结果是:

 SĐCZ sđccz 

Jon Skeet 在新闻组中提到了以下代码 ……

 static string RemoveAccents (string input) { string normalized = input.Normalize(NormalizationForm.FormKD); Encoding removal = Encoding.GetEncoding(Encoding.ASCII.CodePage, new EncoderReplacementFallback(""), new DecoderReplacementFallback("")); byte[] bytes = removal.GetBytes(normalized); return Encoding.ASCII.GetString(bytes); } 

编辑

也许我很疯狂,但我只是跑了以下……

 Dim Input As String = "ŠĐĆŽ-šđčćž" Dim Builder As New StringBuilder() For Each Chr As Char In Input Builder.Append(Chr) Next Console.Write(Builder.ToString()) 

输出是SDCZ-sdccz

字典将是这个的合理解决方案……

 Dictionary AccentEquivelants = new Dictionary(); AccentEquivelants.Add('Š', 's'); //...add other equivelents string inputstring = ""; StringBuilder FixedString = new StringBuilder(inputstring); for (int i = 0; i < FixedString.Length; i++) if (AccentEquivelants.ContainsKey(FixedString[i])) FixedString[i] = AccentEquivelants[FixedString[i]]; return FixedString.ToString(); 

在执行此类字符串操作时需要使用StringBuilder,因为C#中的字符串是不可变的,因此一次更改字符将在内存中创建多个字符串对象,而StringBuilders是可变的并且没有此缺点。