紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1995|回复: 0

[其它源码] 把UTF8字符串转换为VB6的字符串

[复制链接]

12

主题

156

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
281
发表于 2018-9-3 18:37:29 | 显示全部楼层 |阅读模式
找了很久才找到的来自https://www.0xaa55.com/thread-10972-1-1.html
  1. Private Function utf8toString(utf8byte() As Byte) As String
  2. Dim I&
  3. Dim charcode As Long
  4. Dim cb As Long
  5. cb = UBound(utf8byte) + 1

  6. Do While I < cb
  7.     If (utf8byte(I) And &HFE) = &HFC& Then '1111110x
  8.         If I + 6 <= cb Then
  9.             charcode = _
  10.                 ((utf8byte(I + 0) And &H1&) * &H40000000) Or _
  11.                 ((utf8byte(I + 1) And &H3F&) * &H1000000) Or _
  12.                 ((utf8byte(I + 2) And &H3F&) * &H40000) Or _
  13.                 ((utf8byte(I + 3) And &H3F&) * &H1000&) Or _
  14.                 ((utf8byte(I + 4) And &H3F&) * &H40&) Or _
  15.                 ((utf8byte(I + 5) And &H3F&))
  16.             I = I + 6
  17.         Else
  18.             Exit Do
  19.         End If
  20.     ElseIf (utf8byte(I) And &HFC) = &HF8& Then '111110xx
  21.         If I + 5 <= cb Then
  22.             charcode = _
  23.                 ((utf8byte(I + 0) And &H3&) * &H1000000) Or _
  24.                 ((utf8byte(I + 1) And &H3F&) * &H40000) Or _
  25.                 ((utf8byte(I + 2) And &H3F&) * &H1000&) Or _
  26.                 ((utf8byte(I + 3) And &H3F&) * &H40&) Or _
  27.                 ((utf8byte(I + 4) And &H3F&))
  28.             I = I + 5
  29.         Else
  30.             Exit Do
  31.         End If
  32.     ElseIf (utf8byte(I) And &HF8) = &HF0& Then '11110xxx
  33.         If I + 4 <= cb Then
  34.             charcode = _
  35.                 ((utf8byte(I + 0) And &H7&) * &H40000) Or _
  36.                 ((utf8byte(I + 1) And &H3F&) * &H1000&) Or _
  37.                 ((utf8byte(I + 2) And &H3F&) * &H40&) Or _
  38.                 ((utf8byte(I + 3) And &H3F&))
  39.             I = I + 4
  40.         Else
  41.             Exit Do
  42.         End If
  43.     ElseIf (utf8byte(I) And &HF0) = &HE0& Then '1110xxxx
  44.         If I + 3 <= cb Then
  45.             charcode = _
  46.                 ((utf8byte(I + 0) And &HF&) * &H1000&) Or _
  47.                 ((utf8byte(I + 1) And &H3F&) * &H40&) Or _
  48.                 ((utf8byte(I + 2) And &H3F&))
  49.             I = I + 3
  50.         Else
  51.             Exit Do
  52.         End If
  53.     ElseIf (utf8byte(I) And &HE0) = &HC0& Then '110xxxxx
  54.         If I + 2 <= cb Then
  55.             charcode = _
  56.                 ((utf8byte(I + 0) And &H1F&) * &H40&) Or _
  57.                 ((utf8byte(I + 1) And &H3F&))
  58.             I = I + 2
  59.         Else
  60.             Exit Do
  61.         End If
  62.     ElseIf (utf8byte(I) And &HC0) = &H80& Then '10xxxxxx
  63.         '遇到高2位是10的字符,这是不应该出现的。
  64.         Exit Do
  65.     ElseIf (utf8byte(I) And &H80) = &H0& Then  '&Hxxxxxx
  66.         charcode = utf8byte(I) And &H7F
  67.         I = I + 1
  68.     Else
  69.         Exit Do
  70.     End If
  71.     utf8toString = utf8toString & ChrW(charcode)
  72. Loop
  73. End Function
复制代码
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-4-19 22:19 , Processed in 0.022394 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表