sinelaw..
30
对于.NET用户来说,CodeProject中的文章(感谢GvS的提示)确实比我迄今为止看到的任何其他文章更准确地回答了这个问题.
但是,该文章中的代码(在解决方案#1中)很麻烦.这是一个紧凑的版本:
// Based on http://www.codeproject.com/Articles/13503/Stripping-Accents-from-Latin-Characters-A-Foray-in
private static string LatinToAscii(string inString)
{
var newStringBuilder = new StringBuilder();
newStringBuilder.Append(inString.Normalize(NormalizationForm.FormKD)
.Where(x => x < 128)
.ToArray());
return newStringBuilder.ToString();
}
为了扩展答案,此方法使用String.Normalize,其中:
返回一个新字符串,其文本值与此字符串相同,但其二进制表示形式为指定的Unicode规范化形式.
特别是在这种情况下,我们使用NormalizationForm FormKD,在那些相同的MSDN文档中描述如下:
FormKD - 表示使用完全兼容性分解对Unicode字符串进行规范化.
有关unicode规范化表单的更多信息,请参阅Unicode附录#15.