VBS实现Unicode(UTF-16)转UTF-8

标签: , , , ,

有UTF-8转Unicode当然就有Unicode转UTF-8。

'Author: Demon
'Website: https://demon.tw
'Date: 2010/9/28
Function UnicodeToUtf8(str)
    Dim i, c, length
    out = ""
    length = Len(str)
    For i = 1 To length
        c = CLng("&H" & Hex(AscW(Mid(str,i,1))))
        If (c >= &H0001) And (c <= &H007F) Then
            out = out & ChrB(c)
        ElseIf c > &H07FF Then
            out = out & ChrB(&HE0 Or (c\(2^12) And &H0F))
            out = out & ChrB(&H80 Or (c\(2^ 6) And &H3F))
            out = out & ChrB(&H80 Or (c\(2^ 0) And &H3F))
        Else
            out = out & ChrB(&HC0 Or (c\(2^ 6) And &H1F))
            out = out & ChrB(&H80 Or (c\(2^ 0) And &H3F))
        End If
    Next
    UnicodeToUtf8 = out
End Function

参考链接:UTF-8 – 维基百科,自由的百科全书

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. 纯真IP数据库QQWry.dat格式详解
  2. VBS调用WMI遍历搜索硬盘文件并计数
  3. VBS调用Windows API函数
  4. VBS调用WMI监视注册表变动
  5. VBS ByRef和ByVal参数

3 条评论 发表在“VBS实现Unicode(UTF-16)转UTF-8”上

  1. PopEye说道:

    代码中为什么是length = Len(str)而不是LenB(str)呢?有什么具体说法吗?

    • Demon说道:

      因为要获取的是单个字符的Unicode值,而不是单个字节的值,看一下参考链接里的转化方法就知道了。

  2. PopEye说道:

    明白了,UTF-8以字节以编码单元,属于变长编码,而Unicode以双字节为编码单元,属于固定长度编码。

留下回复