附vb的实现代码Public Function TextToUTF(ByVal sText As String) As Variant
    'On Error Resume Next
    Dim bUTF() As Byte
    Dim lCode As Long, i As Long
    Dim p As Long               '数组当前位置
    Dim iUTFLineLen As Integer  'UTF行长
    Dim pUTFLine As Long        '指向UTF行头部位置,以便记录长度
    
    '先预留足够空间
    ReDim bUTF(Len(sText) * 3 + 2)
    p = 2
    pUTFLine = 0
    iUTFLineLen = 0
    For i = 1 To Len(sText)
        'If i Mod 100 = 1 Then Debug.Print i
        lCode = AscW(Mid(sText, i, 1))
        If lCode < 0 Then lCode = lCode + 65536
        If lCode = 13 Then
            '在该行头部填写本行长度
            bUTF(pUTFLine) = iUTFLineLen \ 256
            bUTF(pUTFLine + 1) = iUTFLineLen Mod 256
            '准备下行长度
            iUTFLineLen = 0
            '移动到下行位置
            pUTFLine = p
            '预留2字节空间,以便保存本行长度
            p = p + 2
        ElseIf lCode = 10 Then
            'vbLf忽略
        ElseIf lCode <= &H7F Then           '0xxxxxxx
            bUTF(p) = lCode
            p = p + 1
            iUTFLineLen = iUTFLineLen + 1
        ElseIf lCode <= &H7FF Then          '110xxxxx 10xxxxxx
            bUTF(p) = &HC0 + (lCode \ 64)
            bUTF(p + 1) = &H80 + (lCode Mod 64)
            p = p + 2
            iUTFLineLen = iUTFLineLen + 2
        Else                                '1110xxxx 10xxxxxx 10xxxxxx
            bUTF(p) = &HE0 + (lCode \ 4096)
            bUTF(p + 1) = &H80 + (lCode Mod 4096) \ 64
            bUTF(p + 2) = &H80 + (lCode Mod 64)
            p = p + 3
            iUTFLineLen = iUTFLineLen + 3
        End If
    Next
    '最后一行的长度
    bUTF(pUTFLine) = iUTFLineLen \ 256
    bUTF(pUTFLine + 1) = iUTFLineLen Mod 256
    '重新定义正确长度的字节数组后返回
    ReDim Preserve bUTF(0 To p - 1)
    TextToUTF = bUTF
End Function