当前位置: 代码迷 >> 综合 >> VB不使用 API,将 Utf8 转换为 Unicode
  详细解决方案

VB不使用 API,将 Utf8 转换为 Unicode

热度:76   发布时间:2023-12-16 16:11:11.0

Private Function Utf8ToUni(B() As Byte) As String
   '不使用 API,将 Utf8 转换为 Unicode
   Dim BU As Long
  
   On Error Resume Next
   BU = -1: BU = UBound(B)
   If BU = -1 Then Exit Function
   On Error GoTo 0
  
   Dim I As Long, K As Long, N As Long
   Dim B1 As Byte, cnt As Byte
  
   I = LBound(B)
   If BU > I + 1 Then
      If B(I) = 239 And B(I + 1) = 187 And B(I + 2) = 191 Then I = I + 3 '去掉前三个字符
   End If
  
   Do
      If I > BU Then Exit Do
      B1 = B(I)
      
      If (B1 And &HFC) = &HFC Then
         cnt = 6
      ElseIf (B1 And &HF8) = &HF8 Then
         cnt = 5
      ElseIf (B1 And &HF0) = &HF0 Then
         cnt = 4
      ElseIf (B1 And &HE0) = &HE0 Then
         cnt = 3
      ElseIf (B1 And &HC0) = &HC0 Then
         cnt = 2
      Else
         cnt = 1
      End If
      
      If I + cnt - 1 > BU Then Utf8ToUni = Utf8ToUni & "?": Exit Do
  
      Select Case cnt
      Case 2:    N = B1 And &H1F
      Case 3:    N = B1 And &HF
      Case 4:    N = B1 And &H7
      Case 5:    N = B1 And &H3
      Case 6:    N = B1 And &H1
      Case Else: Utf8ToUni = Utf8ToUni & Chr(B1):  GoTo Next1
      End Select
      
      For K = 1 To cnt - 1
         N = N * &H40 + (B(I + K) And &H3F)
      Next
      
      Utf8ToUni = Utf8ToUni & ChrW(N)
Next1:
      I = I + cnt
   Loop
End Function

 

  相关解决方案