UTF-8编码转换函数

来源:互联网 发布:怎么学数据库 编辑:程序博客网 时间:2024/06/10 16:49

前几天帮同事把爱立信的通讯录导出到多普达手机时发现文字编码不对,上网查了一下用两个函数转换

 

 

    ''' <summary>
    ''' 转换UTF-8串到汉字字符串
    ''' </summary>
    ''' <param name="str">必选。UTF-8编码字符串</param>
    ''' <param name="bHex">可选。UTF-8编码类型十六进制或是十进制,默认值为十六进制</param>
    ''' <param name="strSplit">可选。编码前缀分隔符</param>
    ''' <returns>汉字字符串</returns>
    ''' <remarks>2009-1-18 15:51:59 Sunday</remarks>   
    Public Function UTF8toString(ByVal str As String, Optional ByVal bHex As Boolean = True, Optional ByVal strSplit As String = "") As String
        '转换UTF-8十进制串到字符
        '每3位为一段,每3段表示一个汉字
        Try
            Dim re As String = ""
            Dim strT As String = ""
            If strSplit.Length > 0 Then
                '清除原前缀分隔附
                str = str.Replace(strSplit, "")
            End If

            If bHex = True Then
                '传入参数长度位数检测
                If (str.Length Mod 2) <> 0 Then
                    Return Nothing
                End If

                '将十六进制串转换为十进制字符串
                For i As Integer = 1 To str.Length Step 2
                    strT &= c16to10(Mid(str, i, 2))
                Next
            Else
                '传入参数长度位数检测
                If (str.Length Mod 3) <> 0 Then
                    Return Nothing
                End If
                strT = str
            End If

            '将字符串传入一个Byte数组
            Dim eByte(strT.Length / 3) As Byte
            For i As Integer = 1 To strT.Length Step 3
                eByte(i / 3) = Mid(strT, i, 3)
            Next
            ReDim Preserve eByte(eByte.Length - 2)

            '转换数据到汉字
            re = System.Text.UTF8Encoding.UTF8.GetString(eByte)
            Return re
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

 

 

    ''' <summary>
    ''' 转换汉字字符为用UTF-8编码。十进制时每3位为一段,十六进制时每2位为一段,每3段表示一个汉字。
    ''' </summary>
    ''' <param name="str">必选。需要转换的汉字字符串</param>
    ''' <param name="bHex">可选。转换到十进制或十六进制字符串,默认为十六进制字符串</param>
    ''' <param name="strSplit">可选。字符串前缀分隔符</param>
    ''' <returns>UTF-8编码字符串</returns>
    ''' <remarks>2009-1-18 16:8:29 Sunday</remarks>
    Public Function StringToUTF8(ByVal str As String, Optional ByVal bHex As Boolean = True, Optional ByVal strSplit As String = "") As String
        Try
            Dim re As String = ""
            Dim s As String = ""
            Dim eByte As Byte()
            eByte = System.Text.UTF8Encoding.UTF8.GetBytes(str)
            For Each b As Byte In eByte
                re &= b.ToString
            Next

            If bHex = True Then
                '转换为十六进制
                If strSplit.Length > 0 Then
                    For i As Integer = 1 To re.Length Step 3
                        s &= strSplit & c10to16(Mid(re, i, 3))
                    Next
                    Return s
                Else
                    Return re
                End If
            Else
                '转换为十进制
                If strSplit.Length > 0 Then
                    For i As Integer = 1 To re.Length Step 3
                        s &= strSplit & Mid(re, i, 3)
                    Next
                    Return s
                Else
                    Return re
                End If
            End If
        Catch ex As Exception
            Return Nothing
        End Try
    End Function