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

The*_*urf 5 string silverlight normalize diacritics

我创建了一个函数,将变音字符转换为非变音字符(基于这篇文章)

这是代码:

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
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于String.Normlize不是Silverlight的一部分,我需要找到另一种编写此函数的方法.

到目前为止我找到的唯一解决方案是在服务器端创建一个服务,该服务将调用String.Normalize函数,然后将其返回给客户端...但这会产生巨大的性能问题.

必须有一个更好的选择但正确知道我不知道如何解决这个问题.

The*_*urf 1

感谢您的回答,吉姆,但我尝试像 Mono 项目那样实现规范化类,并且在某一时刻,我意识到这是一种矫枉过正,因为对于应该简单的事情涉及太多依赖项。

\n\n

我想出了这个简单的实现......它并不完美,我知道(这不适用于每种语言)但它会为我完成这项工作,直到 MS 发布支持字符串规范化的 Silverlight 版本。

\n\n
<System.Runtime.CompilerServices.Extension()> _    \nPublic Function RemoveDiacritics(ByVal searchInString As String) As String\n    Dim returnValue As String = ""\n\n    returnValue = searchInString\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x80", "A")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x81", "A")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x82", "A")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x83", "A")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x84", "A")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x85", "A")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x86", "A")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x87", "C")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x88", "E")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x89", "E")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x8a", "E")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x8b", "E")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x8c", "I")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x8d", "I")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x8e", "I")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x8f", "I")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x91", "N")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x92", "O")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x93", "O")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x94", "O")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x95", "O")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x96", "O")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x99", "U")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x9a", "U")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x9b", "U")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x9c", "U")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x9d", "Y")\n\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc3\x86", "AE")\n    returnValue = returnValue.ReplaceLowerAndUpperCase("\xc5\x92", "OE")\n\n    Return returnValue\n\nEnd Function\n\n<System.Runtime.CompilerServices.Extension()> _\nPublic Function ReplaceLowerAndUpperCase(ByVal searchInString As String, ByVal oldString As String, ByVal newString As String) As String\n    Dim returnValue As String = ""\n\n    returnValue = searchInString.Replace(oldString.ToLower, newString.ToLower)\n    returnValue = returnValue.Replace(oldString.ToUpper, newString.ToUpper)\n\n    Return returnValue\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n