'第壹個參數:指定要轉換成的字符集代碼頁,它可以是任何已經安裝的或系統自帶的字符集,妳也可以使用如下所示代碼頁之壹。
' CP_ACP 當前系統ANSI代碼頁
' CP_MACCP 當前系統Macintosh代碼頁
' CP_OEMCP 當前系統OEM代碼頁,壹種原始設備制造商硬件掃描碼
' CP_SYMBOL Symbol代碼頁.
' CP_THREAD_ACP 當前線程ANSI代碼頁,用於Windows 2000及以後版本,我不明白是什麽
' CP_UTF7 UTF-7,設置此值時lpDefaultChar和lpUsedDefaultChar都必須為NULL
' CP_UTF8 UTF-8,設置此值時lpDefaultChar和lpUsedDefaultChar都必須為NULL
'第二個參數:指定如何處理沒有轉換的字符,但不設此參數函數會運行的更快壹些,我都是把它設為0。
'第三個參數: 待轉換的寬字符串?
'第四個參數:待轉換寬字符串的長度,-1表示轉換到字符串結尾。
'第五個參數: 接收轉換後輸出新串的緩沖區?
'第六個參數: 輸出緩沖區大小?
'第七個參數: 指向字符的指針?
'第八個參數:開關變量的指針,用以表明是否使用過默認字符,壹般設為0。
Private 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
'
Private Const CP_UTF8 = 65001
'
Sub test()
strTest = "這是文件內容"
testFile = "d:\gb2312.html"
Call SaveFile(testFile, strTest, "gb2312")
testFile = "d:\utf8.html"
Call SaveFile(testFile, strTest, "utf8")
End Sub
Sub SaveFile(strPath_file, str, strPageCode)
If strPageCode = "utf8" Then
'存為UTF-8
Dim lBufSize As Long
Dim lRest As Long
Dim bUTF8() As Byte
Dim TLen As Long
'
TLen = Len(str)
lBufSize = TLen * 3 + 1
ReDim bUTF8(lBufSize - 1)
lRest = WideCharToMultiByte(CP_UTF8, 0, StrPtr(str), TLen, bUTF8(0), lBufSize, vbNullString, 0)
If lRest Then
lRest = lRest - 1
ReDim Preserve bUTF8(lRest)
Open strPath_file For Binary As #1
Put #1, , bUTF8
Close #1
End If
Else
'存為GB-2312
Fn = FreeFile
Open strPath_file For Output As Fn
Print #Fn, str
Close #Fn
End If
End Sub