关于String.Normalize的MSDN文章简单说明:
返回一个新字符串,其二进制表示形式为特定的Unicode规范化形式.
有时也会提到"Unicode规范化形式C".
我只是想知道,这是什么意思?这个功能在现实生活中有用吗?
Han*_*ing 65
表单C和表单D之间的一个区别是如何表示带有重音符号的字母:表单C使用带有重音符号的单个字母,而表单D将其分隔为字母和重音符号.
例如,"à"可以是代码点224("带有严重的拉丁文小写字母A"),或代码点97("拉丁文小写字母A"),后跟代码点786("组合严重重音").
副作用是这使得可以容易地创建"移除重音"方法.
public static string RemoveAccents(string input)
{
return new string(
input
.Normalize(System.Text.NormalizationForm.FormD)
.ToCharArray()
.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
.ToArray());
// the normalization to FormD splits accented letters in accents+letters
// the rest removes those accents (and other non-spacing characters)
}
Run Code Online (Sandbox Code Playgroud)