我创建了一个函数,将变音字符转换为非变音字符(基于此
post)
这是代码:
Public Function RemoveDiacritics(ByVal searchInString As String) As String Dim returnValue As String = "" Dim formD As String = searchInString.Normalize(System.Text.NormalizationForm.FormD) Dim unicodeCategory As System.Globalization.UnicodeCategory = Nothing Dim stringBuilder As New System.Text.StringBuilder() For formScan As Integer = 0 To formD.Length - 1 unicodeCategory = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(formD(formScan)) If unicodeCategory <> System.Globalization.UnicodeCategory.NonSpacingMark Then stringBuilder.Append(formD(formScan)) End If Next returnValue = stringBuilder.ToString().Normalize(System.Text.NormalizationForm.FormC) Return returnValue End Function
不幸的是,由于String.Normlize不是Silverlight的一部分,我需要找到另一种编写此函数的方法.
到目前为止我找到的唯一解决方案是在服务器端创建一个服务,该服务将调用String.Normalize函数,然后将其返回给客户端…但这会产生巨大的性能问题.
必须有一个更好的选择但正确知道我不知道如何解决这个问题.
解决方法
西蒙,
这是Normalize()的基本实现,调用Normalization类:
public string Normalize () { return Normalization.Normalize (this,0); } public string Normalize (NormalizationForm normalizationForm) { switch (normalizationForm) { default: return Normalization.Normalize (this,0); case NormalizationForm.FormD: return Normalization.Normalize (this,1); case NormalizationForm.FormKC: return Normalization.Normalize (this,2); case NormalizationForm.FormKD: return Normalization.Normalize (this,3); } }
您可以从GitHub上的Mono项目浏览Normalization类的实现:
祝好运,吉姆麦克库迪