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