[ASP.NET]半形全形 互轉 (處理難字)

  • 16330
  • 0

[ASP.NET]半形全形 互轉 (處理難字)

通常在.NET裡面,轉半形全形,最簡單的方法會透過
Microsoft.VisualBasic.Strings裡面的StrConv()來幫忙轉換。
例如:

Me.textbox1.Text=Strings.StrConv(Me.textbox1.Text, VbStrConv.Narrow)

 

但是,這個方式遇到難字,例如「堃」,會轉成「?」。
因為StrConv跟VbStrConv的列舉型別與文化特性有關。

 

其實最簡單的方式,還是「判斷字串是否為需要轉換的字」,因為半形轉全形,通常只針對「特殊符號」跟「英數字」。
這邊有兩個function可以用來轉換半形跟全形(已經處理掉難字跟空白),有興趣的可以直接拿去用。

請參考:強力鎯頭 VB BLOG

 

    Public Function ToWchr(ByRef data As String) As String
        Dim sb As New StringBuilder
        Dim ascii As Integer = 0

        For Each c As Char In data.ToCharArray()
            ascii = Convert.ToInt32(c)
            If ascii = 32 Then
                sb.Append(Convert.ToChar(12288))
            Else
                sb.Append(Convert.ToChar(ascii + IIf(ascii < 127, 65248, 0)))
            End If
        Next

        Return sb.ToString
    End Function

    ' 全形 轉 半形
    Public Function ToNchr(ByRef data As String) As String
        Dim sb As New StringBuilder
        Dim ascii As Integer = 0

        For Each c As Char In data.Replace("〔", "[").Replace("〕", "]").Replace("'", "'").ToCharArray()
            ascii = Convert.ToInt32(c)
            If ascii = 12288 Then
                sb.Append(Convert.ToChar(32))
            Else
                If ascii > 65280 And ascii < 65375 Then
                    sb.Append(Convert.ToChar(ascii - 65248))
                Else
                    sb.Append(Convert.ToChar(ascii))
                End If
            End If
        Next

        Return sb.ToString
    End Function

blog 與課程更新內容,請前往新站位置:http://tdd.best/