用英语等价物替换德语字符(变音符号,重音符号)

时间:2011-09-19 12:34:15

标签: c# .net cultureinfo

用英语等值替换德语字符(变音符号,重音符号)

我需要从各个文本字段中删除任何德语特定字符,以便处理到另一个不接受它们有效的系统。

所以我所知道的人物是:

SS 一个 ö ü 一个 Ö Ü

目前我有一种手动方式来替换它们:

myGermanString.Replace("ä","a").Replace("ö","o").Replace("ü","u").....

但我希望有一种更简单/更有效的方法。由于我每次运行会在数千个字符串上执行此操作,其中99%不会包含这些字符。

也许是一种涉及某种CultureInfo的方法?

(例如,根据MS,以下返回字符串相等

String.Compare("Straße", "Strasse", StringComparison.CurrentCulture);

所以必须存在某种转换表吗?)

3 个答案:

答案 0 :(得分:27)

此过程称为删除“变音符号” - 请参阅使用以下代码的Removing diacritics (accents) from strings

public static String RemoveDiacritics(String s)
{
  String normalizedString = s.Normalize(NormalizationForm.FormD);
  StringBuilder stringBuilder = new StringBuilder();

  for (int i = 0; i < normalizedString.Length; i++)
  {
    Char c = normalizedString[i];
    if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
      stringBuilder.Append(c);
  }

  return stringBuilder.ToString();
}

答案 1 :(得分:8)

如果你想删除变音符号,@ Barry的回答很好。

但是在德语中通常会替换ü=&gt;呃,ö=&gt;等等。

Here's a link to a similar question

答案 2 :(得分:4)

来自jb http://weblogs.asp.net/fmarguerie/archive/2006/10/30/removing-diacritics-accents-from-strings.aspx

提到的文章
public static String RemoveDiacritics(String s)
{
  String normalizedString = s.Normalize(NormalizationForm.FormD);
  StringBuilder stringBuilder = new StringBuilder();

  for (int i = 0; i < normalizedString.Length; i++)
  {
    Char c = normalizedString[i];
    if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
      stringBuilder.Append(c);
  }

  return stringBuilder.ToString();
}