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. PathFindFileName函数,由文件路径获得文件名
  2. JCreator打包JAR可执行文档
  3. VBS里的变量名和标识符(Identifiers)
  4. Suhosin,PHP保护神?
  5. AscW函数返回负数的问题

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

  1. PopEye说道:

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

    • Demon说道:

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

  2. PopEye说道:

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

留下回复