ASP UTF-8編碼產生靜態網頁的函數

來源:互聯網
上載者:User

以下函數採用FSO對象,檔案位置在FSO.ASP。FSO對象的檔案編碼屬性只有三種,系統預設,Unicode,ASCII,並沒有我們要的utf-8,所以一般中文系統上使用FSO對象產生的檔案都是gb2312網頁編碼格式,無法產生UTF-8編碼,因此,英文等拉丁語系和中文可以正常顯示,但象俄語等非拉丁語系,頁面就會出現亂碼。 複製代碼 代碼如下:function createfile(sfilename,scontent)
set fso=server.CreateObject("scripting.filesystemobject")
'set f1=fso.opentextfile(sfilename,2,true,-1) 'append=8 only write=2 Unicode編碼=-1
set f1=fso.opentextfile(sfilename,2,true)
f1.write(scontent)
f1.close
set fso=nothing
end function

選擇用ADODB.STREAM對象來替代FSO對象,因為STREAM類有LOADFROMFILE和SAVETOFILE方法,並且有一個至關重要的屬性CHARSET,這是FSO沒有的。以下函數採用用Adodb.Stream編寫,成功產生UTF-8網頁檔案。 複製代碼 代碼如下:function createfile(sfilename,scontent)
Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Open
.Charset = "utf-8"
.Position = objStream.Size
.WriteText=scontent
.SaveToFile sfilename,2
.Close
End With
Set objStream = Nothing
end function

對於採用FSO的程式,只要把這個函數修改一下, 函數名稱不變,就可以正常運行, 比較省事方便。

如果採用模板組建檔案, 還需要把模板檔案用UTF-8編碼讀進來,否則,後台發布正確檔案編碼,但模板檔案讀進來是用FSO的GB2312編碼,模板頁面的俄語等非拉丁語系,就會出現亂碼。函數修改如下:

原來採用的FSO 的READFILE函數 複製代碼 代碼如下:function readfile(sfilename)
Set fso=server.CreateObject("scripting.filesystemobject")
Set f = fso.OpenTextFile(sfilename, 1, true)
if not f.AtEndOfStream then readfile = f.readAll
Set f=nothing
Set fso=nothing
end function

替換採用的ADODB.STREAM 的READFILE函數

注意根據實際需要,去掉或保留Function readfile (sfilename,charset)charset參數charset。 複製代碼 代碼如下:Function readfile (sfilename)
Dim f
Set stm=server.CreateObject("adodb.stream")
stm.Type=2 '以本模式讀取
stm.mode=3
stm.charset="utf-8"
stm.open
stm.loadfromfile sfilename
f=stm.readtext
stm.Close
Set stm=Nothing
readfile=f
End Function

關於檔案編碼和網頁編碼, 請參考“字元集Charset和檔案編碼Encoding的區別詳解”。

其他範例程式 複製代碼 代碼如下:'-------------------------------------------------
'函數名稱:ReadTextFile
'作用:利用AdoDb.Stream對象來讀取UTF-8格式的文字檔
'----------------------------------------------------
Function ReadFromTextFile (FileUrl,CharSet)
Dim str
Set stm=server.CreateObject("adodb.stream")
stm.Type=2 '以本模式讀取
stm.mode=3
stm.charset=CharSet
stm.open
stm.loadfromfile server.MapPath(FileUrl)
str=stm.readtext
stm.Close
Set stm=nothing
ReadFromTextFile=str
End Function

'-------------------------------------------------
'函數名稱:WriteToTextFile
'作用:利用AdoDb.Stream對象來寫入UTF-8格式的文字檔
'----------------------------------------------------
Sub WriteToTextFile (FileUrl,byval Str,CharSet)
Set stm=Server.CreateObject("adodb.stream")
stm.Type=2 '以本模式讀取
stm.mode=3
stm.charset=CharSet
stm.open
stm.WriteText str
stm.SaveToFile server.MapPath(FileUrl),2
stm.flush
stm.Close
Set stm=Nothing
End Sub

其中, 這一行要注意路徑問題,stm.SaveToFile server.MapPath(FileUrl),2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.