UTF-8编码转换函数

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

 

 

    ''' <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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值