在Silverlight中删除变音符号(String.Normalize issue)

我创建了一个函数,将变音字符转换为非变音字符(基于此 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

祝好运,吉姆麦克库迪

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...