【问题标题】:Replace German characters (umlauts, accents) with english equivalents用英语等价物替换德语字符(变音符号、重音符号)
【发布时间】:2011-11-20 05:21:33
【问题描述】:

将德语字符(变音符号、重音符号)替换为英语对应的字符

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

所以我知道的字符是:

ß 一种 ö ü 一种 Ö ü

目前我有一些手动替换它们的方法:

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

但我希望有一种更简单/更有效的方法。因为我每次运行都会处理数千个字符串,其中 99% 不会包含这些字符。

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

(比如根据MS,下面返回的字符串是相等的

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

所以一定有某种转换表已经存在?)

【问题讨论】:

标签: c# .net cultureinfo


【解决方案1】:

该过程称为删除“变音符号” - 请参阅使用以下代码的 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();
}

【讨论】:

  • 你能在这里总结一下这篇文章吗?它有助于将信息保存在一个位置,并有助于防止链接失效。
  • 这不起作用的是'ß'字符 - 它只是按原样返回。
  • @jb。我相信您必须对德语字符进行硬替换才能达到预期的效果。这可能是更可取的方法,因为带有元音变音的单字符德国字母可以映射到非元音变音的两个字符版本。有关解决方案,请参阅 Joe 的 answer 中链接的问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2023-03-08
  • 2013-02-09
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多