ASP 讀取 UTF-8 編碼的文字檔案

想要在 ASP 讀取文字檔案,可以使用 Scripting.FileSystemObject 或 ADODB.Stream 物件,但是如果想要讀取的檔案是 UTF-8 編碼的話,只能使用 ADODB.Stream。

Scripting.FileSystemObject

Dim filePath : filePath = Server.MapPath("/readme.txt")
Dim fso : Set fso = Server.CreateObject("Scripting.FileSystemObject")
Dim textFile : Set textFile = fso.OpenTextFile(filePath, 1)

'讀取 5 個字元
Response.Write(textFile.Read(5))
'讀取一行
Response.Write(textFile.ReadLine)
'讀取全部
Response.Write(textFile.ReadAll)
'一行一行讀取,直到檔案結尾
Do Until textFile.AtEndOfStream
    Response.Write(textFile.ReadLine)
Loop

textFile.Close
Set textFile = Nothing
Set fso = Nothing

使用 FileSystemObject 的 OpenTextFile 方法來開啟文字串流,會傳回 TextStream 物件,之後可以用 Read, ReadLine, ReadAll 方法來讀取資料,雖然能讀取 Unicode 編碼的檔案,但是卻無法讀取 UTF-8。
語法:
fso.OpenTextFile(filename[, iomode[, create[, format]]])

  • filename : 必要,欲開啟的檔案路徑。

  • iomode : 選擇性,檔案開啟模式。
    1 = ForReading : 以唯讀方式開啟,無法寫入資料到檔案。
    2 = ForWriting : 開啟檔案供寫入。
    8 = ForAppending : 開啟檔案供寫入,資料會從檔案結尾寫入。

  • create : 選擇性,檔案不存在時的動作。
    True : 檔案不存在時自動建立。
    False : 檔案不存在不會自動建立,預設值。

  • format : 選擇性,指定開啟格式。
    -2 = TristateUseDefault : 使用系統預設值開啟。
    -1 = TristateTrue : 以 Unicode 開啟。
    0 = TristateFalse : 以 ASCII 開啟。

ADODB.Stream

Dim filePath : filePath = Server.MapPath("/readme.txt")
Dim stream : Set stream = Server.CreateObject("ADODB.Stream")

'設定為文字資料
stream.Type = 2
'設定為UTF-8編碼
stream.Charset = "UTF-8"
stream.Open
'從指定的位置載入檔案
stream.LoadFromFile filePath
'讀取資料
Response.Write(stream.ReadText)

stream.Close
Set stream = Nothing

使用 ADODB.Stream 的 LoadFromFile 方法載入檔案,並設定 Charset 編碼,就可以用 ReadText 方法讀取 UTF-8 檔案。

Reference

OpenTextFile Method
http://msdn.microsoft.com/en-us/library/314cz14s(v=vs.84).aspx
ASP OpenTextFile Method
http://www.w3schools.com/asp/met_opentextfile.asp
ASP TextStream Object
http://www.w3schools.com/asp/asp_ref_textstream.asp
Stream Object Properties, Methods, and Events
http://msdn.microsoft.com/en-us/library/windows/desktop/ms677486(v=vs.85).aspx