删除 Silverlight 中的变音符号(String.Normalize 问题) [英] Removing diacritics in Silverlight (String.Normalize issue)

查看:11
本文介绍了删除 Silverlight 中的变音符号(String.Normalize 问题)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我确实创建了一个将变音符字符转换为非变音符字符的函数(基于此 post)

I did create a function that transforms diacritic characters into non-diacritic characters (based on this 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 的一部分,我需要找到其他方法来编写此函数.

Unfortunately, as the String.Normlize isn’t part of Silverlight, I need to find an other way to write this function.

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

The only solution I have found so far is to create a service on the server side that would call the String.Normalize function and then return it to the client side… but that would create a huge performance issue.

一定有更好的选择,但我知道我不知道如何解决这个问题.

There must be a better alternative but right know I have no clue on how to fix this problem.

推荐答案

感谢 Jim 的回答,但我尝试像 Mono Project 那样实现规范化类,有一次,我意识到这是一种矫枉过正,因为还有办法一些应该很简单的事情涉及许多依赖项.

Thanks for your answer Jim but I tried to implement the normalization class like the Mono Project did and at one point, I realized it was an overkill because there's way too many dependencies involved for something that should be simple.

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

I came up with this simple implementation... it's not perfect, I know (This won't work for every language) but it will do the job for me until MS release a version of Silverlight with string normalization support.

<System.Runtime.CompilerServices.Extension()> _    
Public Function RemoveDiacritics(ByVal searchInString As String) As String
    Dim returnValue As String = ""

    returnValue = searchInString

    returnValue = returnValue.ReplaceLowerAndUpperCase("À", "A")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Á", "A")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Â", "A")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ã", "A")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ä", "A")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Å", "A")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Æ", "A")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Ç", "C")

    returnValue = returnValue.ReplaceLowerAndUpperCase("È", "E")
    returnValue = returnValue.ReplaceLowerAndUpperCase("É", "E")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ê", "E")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ë", "E")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Ì", "I")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Í", "I")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Î", "I")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ï", "I")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Ñ", "N")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Ò", "O")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ó", "O")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ô", "O")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Õ", "O")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ö", "O")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Ù", "U")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ú", "U")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Û", "U")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Ü", "U")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Ý", "Y")

    returnValue = returnValue.ReplaceLowerAndUpperCase("Æ", "AE")
    returnValue = returnValue.ReplaceLowerAndUpperCase("Œ", "OE")

    Return returnValue

End Function

<System.Runtime.CompilerServices.Extension()> _
Public Function ReplaceLowerAndUpperCase(ByVal searchInString As String, ByVal oldString As String, ByVal newString As String) As String
    Dim returnValue As String = ""

    returnValue = searchInString.Replace(oldString.ToLower, newString.ToLower)
    returnValue = returnValue.Replace(oldString.ToUpper, newString.ToUpper)

    Return returnValue
End Function

这篇关于删除 Silverlight 中的变音符号(String.Normalize 问题)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆