将Unicode char转换为ASCII(.NET)中最接近(最相似)的char

And*_*rey 13 .net unicode encoding ascii

如何将不同的Unicode字符转换为最接近的ASCII等效字符?像Ä - > A.我用Google搜索,但没有找到任何合适的解决方案.诀窍Encoding.ASCII.GetBytes("Ä")[0]没有用.(结果是?).

我发现有一个类Encoder具有一个Fallback属性,该属性完全适用于char无法转换的情况,但implements(EncoderReplacementFallback)是愚蠢的并转换为?.

有任何想法吗?

Bal*_*usC 9

如果它只是删除了变音符号,那么请回答这个问题:

static string RemoveDiacritics(string stIn) {
  string stFormD = stIn.Normalize(NormalizationForm.FormD);
  StringBuilder sb = new StringBuilder();

  for(int ich = 0; ich < stFormD.Length; ich++) {
    UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]);
    if(uc != UnicodeCategory.NonSpacingMark) {
      sb.Append(stFormD[ich]);
    }
  }

  return(sb.ToString().Normalize(NormalizationForm.FormC));
}
Run Code Online (Sandbox Code Playgroud)