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

标签: , , , ,

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

'Author: Demon
'Website: http://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. 用VBS获取屏幕分辨率
  2. Zen Coding for EditPlus
  3. 用Shell.Application获取图片分辨率
  4. WMI工具:Scriptomatic 2.0
  5. WMI工具:WMI CIM Studio

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

  1. PopEye说道:

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

    • Demon说道:

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

  2. PopEye说道:

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

留下回复