web-dev-qa-db-ja.com

ドイツ語の文字(ウムラウト、アクセント)を英語の同等の文字に置き換えます

ドイツ語の文字(ウムラウト、アクセント)を英語の同等の文字に置き換えます

有効なものとして受け入れられない別のシステムに処理するために、テキストのさまざまなフィールドからドイツ語固有の文字を削除する必要があります。

したがって、私が知っている文字は次のとおりです。

ßäöüÄÖÜ

現時点では、それらを手動で置き換える方法が少しあります。

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

しかし、私はそれを行うためのより簡単でより効率的な方法があることを望んでいました。実行ごとに数千の文字列で実行するため、99%にはこれらの文字が含まれません。

たぶん、ある種のCultureInfoを含むメソッドですか?

(たとえば、MSによると、次の結果は文字列が等しいことを示します

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

したがって、何らかの変換テーブルがすでに存在している必要がありますか?)

13
jb.

@Barryの答えは、発音区別符号を削除したい場合に適しています。

しかし、ドイツ語では、ü=> ue、ö=> oeなどを置き換えるのが一般的です。

同様の質問へのリンクがあります

10
Joe

このプロセスは、「発音区別符号」の削除として知られています 文字列から発音区別符号(アクセント)を削除する を参照してください。これは次のコードを使用します。

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();
}
28
Barry Kaye

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();
}
4
Matt