Заменить немецкие символы (умлауты, акценты) английскими эквивалентами - PullRequest
13 голосов
/ 19 сентября 2011

Заменить немецкие символы (умлауты, акценты) английскими эквивалентами

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

Итак, мне известны следующие символы:

ß ä ö ü Ä Ö Ü

На данный момент у меня есть немного ручного способа их замены:

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

Но я надеялся, что есть более простой / более эффективный способ сделать это. Так как я буду делать это с тысячами строк за цикл, 99% из которых не будут содержать эти символы.

Может быть, метод, включающий какое-то CultureInfo?

(например, согласно MS, следующие возвращаемые строки равны

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

так, должно быть, уже существует какая-то таблица преобразования?)

Ответы [ 3 ]

27 голосов
/ 19 сентября 2011

Процесс известен как удаление «диакритических знаков» - см. Удаление диакритических знаков (акцентов) из строк , в котором используется следующий код:

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();
}
8 голосов
/ 19 сентября 2011

@ Барри ответ хорош, если вы хотите убрать диакритические знаки.

Но на немецком языке обычно заменяют ü => ue, ö => oe и т. Д.

Вотссылка на похожий вопрос .

4 голосов
/ 19 сентября 2011

Из статьи, упомянутой 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();
}
...