我确实创建了一个将变音符号字符转换为非变音符号字符的函数(基于此 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 类的实现:
http://github.com/mono/mono/blob/mono-2.6.4/mcs/class/corlib/Mono.Globalization.Unicode/Normalization.cs
祝你好运,
吉姆·麦柯迪
关于silverlight - 删除 Silverlight 中的变音符号(String.Normalize 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046937/