进来做一个程序,要实现读取UTF-8编码的文件以及保存成UTF-8格式。我现在已经能将一个该编码的文件读入text控件了,但要把那个textbox里面的文本写成utf-8倒是更加麻烦!现在我的问题很简单:就是如何把文本框里面的东东用UTF-8编码写成文件(环境是vb6+winxp),如果有那位高手知道,请不吝赐教啊!先谢了!

解决方案 »

  1.   

    Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
    Public Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
    Public Const CP_UTF8 = 65001Public Function GetUTF8Code(ByVal sUnicode As String, Optional ByVal fUTFCode As Boolean = False) As Variant
        Dim i As Long
        Dim lLength As Long
        Dim lBufferSize As Long
        Dim lResult As Long
        Dim bUTF8() As Byte
        
        GetUTF8Code = ""
        lLength = Len(sUnicode)
        If lLength = 0 Then Exit Function    
        lBufferSize = lLength * 3 + 1
        ReDim bUTF8(lBufferSize - 1)
        
        lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(sUnicode), lLength, bUTF8(0), lBufferSize, vbNullString, 0)
        
        If lResult <> 0 Then
            lResult = lResult - 1
            ReDim Preserve bUTF8(lResult)
            If fUTFCode Then
                For i = LBound(bUTF8) To UBound(bUTF8)
                        GetUTF8Code = GetUTF8Code & Hex(bUTF8(i))
                Next
            Else
                GetUTF8Code = bUTF8
            End If
        End If
    End FunctionPublic Function UTF8_Decode(bUTF8() As Byte) As String
        Dim lRet As Long
        Dim lLen As Long
        Dim lBufferSize As Long
        Dim sBuffer As String
        Dim bBuffer() As Byte
        
        lLen = UBound(bUTF8) + 1
        
        If lLen = 0 Then Exit Function
        
        lBufferSize = lLen * 2
        
        sBuffer = String$(lBufferSize, Chr(0))
        
        lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(bUTF8(0)), lLen, StrPtr(sBuffer), lBufferSize)
        
        If lRet <> 0 Then
            sBuffer = Left(sBuffer, lRet)
        End If
        
        UTF8_Decode = sBuffer
    End Functiondim b() as byte
    b=GetUTF8Code(text1.text)
      

  2.   

    open "c:\code.txt" for binary as #1
    put #1,,b
    close #1
      

  3.   

    Function USC2UTF8(ByVal HZ As String) As String '汉字换为UTF-8
    Dim i As Integer
    Dim str_Char As String
    Dim DAT(2) As Byte '存放UTF-8数据
    Dim DAT1() As Byte '存放原始字节数据,1汉字需要4个数租元素USC2UTF8 = vbNullString
    For i = 1 To Len(HZ)
      str_Char = Mid(HZ, i, 1)
        '判断是不是汉字
        If AscW(str_Char) > &H0 And AscW(str_Char) < &H800 Then
          USC2UTF8 = USC2UTF8 & str_Char
        Else
        '按照  FFFF FFFF转换为二进制的   1110xxxx 10xxxxxx 10xxxxxx'高位低位也要互换
          ReDim DAT1(1) As Byte
          DAT1 = str_Char 'DAT1变成两个元素的数租
          DAT(0) = (DAT1(1) And 240) / 16 Or 224 '将第一个字节取前4位进行 1110+
          DAT(1) = (DAT1(1) And 15) * 4 + ((DAT1(0) And 192) / 64) Or 128 '将第1个字节后四位进行 10+,连接第2字节前两位
          DAT(2) = DAT1(0) And 63 Or 128 '10连接 第2位后两位连接和第三位
          USC2UTF8 = USC2UTF8 & CStr(Hex(DAT(0))) + CStr(Hex(DAT(1))) + CStr(Hex(DAT(2)))
        End If
     Next
    End Function