2012-01-20 편집 : 오 소년! 이 솔루션은 훨씬 간단했고 거의 영원히 프레임 워크에있었습니다. knightpfhor가 지적한 바와 같이 :
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);
문자열에서 분음 부호를 제거하는 함수는 다음과 같습니다.
static string RemoveDiacritics(string text)
{
string formD = text.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();
foreach (char ch in formD)
{
UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch);
if (uc != UnicodeCategory.NonSpacingMark)
{
sb.Append(ch);
}
}
return sb.ToString().Normalize(NormalizationForm.FormC);
}
MichKap의 블로그 ( RIP ... ) 에 대한 자세한 내용 .
원칙은 'é'를 2 개의 연속 문자 'e'로 바꾸는 것입니다. 그런 다음 문자를 반복하고 분음 부호를 건너 뜁니다.
"héllo"는 "hecute"llo가되며, 차례로 "hello"가됩니다.
Debug.Assert("hello"==RemoveDiacritics("héllo"));
참고 : 다음은 동일한 기능의보다 컴팩트 한 .NET4 + 버전입니다.
static string RemoveDiacritics(string text)
{
return string.Concat(
text.Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch)!=
UnicodeCategory.NonSpacingMark)
).Normalize(NormalizationForm.FormC);
}
string.Normalize
합니까?