VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 2780|回复: 5

[讨论] 在由byte转为UTF-8的时候见鬼了

[复制链接]
头像被屏蔽
发表于 2012-9-1 20:59:41 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

本帖被以下淘专辑推荐:

发表于 2012-9-1 22:28:39 | 显示全部楼层
本帖最后由 admin6677 于 2012-9-1 22:32 编辑

网上有大堆Byte()转UTF8的代码,论坛内都有。

http://www.vbgood.com/thread-102983-1-1.html

这个程序内部有转换的,你仔细看帖子
http://www.vbgood.com/thread-65294-1-1.html


http://www.vbgood.com/forum.php? ... &fromuid=110914

点评

我老用的我知道,全部要自己改写,蛋疼!  发表于 2012-9-6 22:56
网上这些代码没1个是对的!!!!  发表于 2012-9-6 22:56
回复 支持 反对

使用道具 举报

发表于 2012-9-2 08:24:26 | 显示全部楼层
可能性:
1.那个byte()本来就是utf8编码
2.你转错了。。。
回复 支持 反对

使用道具 举报

发表于 2012-9-2 10:39:45 | 显示全部楼层
下面是utf-8字节数组转字符串的过程,我一直在用,你不妨试一下:
Function Utf8ToUnicode(Utf() As Byte) As String
    Dim i As Long, j As Long, K As Long, N As Long
    Dim b As Byte, cnt As Byte
    Dim Buf() As String
    Dim utfLen As Long
   
    utfLen = -1
    On Error Resume Next
    utfLen = UBound(Utf)
    If utfLen = -1 Then Exit Function
   
    On Error GoTo 0

    ReDim Buf(utfLen)

    i = 0
    j = 0
    Do While i <= utfLen
        b = Utf(i)

        If (b And &HFC) = &HFC Then
            cnt = 6
        ElseIf (b And &HF8) = &HF8 Then
            cnt = 5
        ElseIf (b And &HF0) = &HF0 Then
            cnt = 4
        ElseIf (b And &HE0) = &HE0 Then
            cnt = 3
        ElseIf (b And &HC0) = &HC0 Then
            cnt = 2
        Else
            cnt = 1
        End If

        If i + cnt - 1 > utfLen Then
            Buf(j) = "?"
            Exit Do
        End If

        Select Case cnt
        Case 2
            N = b And &H1F
        Case 3
            N = b And &HF
        Case 4
            N = b And &H7
        Case 5
            N = b And &H3
        Case 6
            N = b And &H1
        Case Else
            Buf(j) = Chr(b)
            GoTo Continued:
        End Select

        For K = 1 To cnt - 1
            b = Utf(i + K)
            N = N * &H40 + (b And &H3F)
        Next

        Buf(j) = ChrW(N)
Continued:
        i = i + cnt
        j = j + 1
    Loop

    Utf8ToUnicode = Join(Buf, "")
End Function
回复 支持 反对

使用道具 举报

发表于 2012-9-2 17:50:00 | 显示全部楼层
byte跟UTF8应该用MultiByteToWideChar和WideCharToMultiByte
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2012-9-3 08:12:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-9-25 16:47

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表