用 ADODB.Stream :Dim objStream As Object Set objStream = CreateObject("ADODB.Stream")With objStream .Type = 2 .Mode = 3 .Open.Position = 0 .Charset = "UTF-8" .WriteText "’†•¶Žš", 1 .SaveToFile App.Path & "\utf-8.txt", 2 .Close End With
Dim objStream As Object Set objStream = CreateObject("ADODB.Stream")With objStream .Type = 2 .Mode = 3 .Open.Position = 0 .Charset = "UTF-8" .WriteText "中文汉字", 1 .SaveToFile App.Path & "\utf-8.txt", 2 .Close End With
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
StrConv(anABSTR, vbUnicode) ' 返回一个Unicode的BSTR不过这是Unicode和ANSI的转换,UTF-8把Unicode的高位截掉了(Unicode字是16位的),还需补上
Set objStream = CreateObject("ADODB.Stream")With objStream
.Type = 2
.Mode = 3
.Open.Position = 0
.Charset = "UTF-8"
.WriteText "’†•¶Žš", 1
.SaveToFile App.Path & "\utf-8.txt", 2
.Close
End With
Set objStream = CreateObject("ADODB.Stream")With objStream
.Type = 2
.Mode = 3
.Open.Position = 0
.Charset = "UTF-8"
.WriteText "中文汉字", 1
.SaveToFile App.Path & "\utf-8.txt", 2
.Close
End With
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