古詩詞大全網 - 成語用法 - VB中如何生成編碼格式為UTF-8的文本文件?

VB中如何生成編碼格式為UTF-8的文本文件?

'API 函數WideCharToMultiByte參數說明

'第壹個參數:指定要轉換成的字符集代碼頁,它可以是任何已經安裝的或系統自帶的字符集,妳也可以使用如下所示代碼頁之壹。

' 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