ASP+FSO產生的網頁檔案預設編碼格式以及轉換成UTF-8編碼方法

來源:互聯網
上載者:User

具體特徵如下:
1、通過模板實現俄文正常。
2、通過後台資料庫產生的靜態俄文資訊,後台顯示正常, 前台亂碼。
3、英文正常。
和該主題相關的類似或不同表達
FSO寫UTF-8編碼檔案
FSO怎麼才能產生utf-8編碼的檔案
FSO產生的檔案預設是什麼編碼格式
如何轉換成UTF-8編碼
FSO產生靜態網頁的問題
ASP中用FSO組建檔案代碼如下 複製代碼 代碼如下:function createfile(sfilename,scontent)
set fso=server.CreateObject("scripting.filesystemobject")
set f1=fso.opentextfile(sfilename,2,true,-1)
f1.write(scontent)
f1.close
set fso=nothing
end function

fso.opentextfile(sfilename,2,true,-1) 最後一個參數-1是指定編碼格式為Unicode,編碼格式為Unicode在網頁顯示的是UTF-16 little-endian。
OpenTextFile方法
建立指定檔案並返回TextStream對象,該對象可用於讀或寫建立的檔案。
object.OpenTextFile(filename[, iomode[, create[, format]]])
參數 object,必選項。應為FileSystemObjec或Folder對象的名稱。 這裡是fso。
filename,必選項。字串運算式,指明要建立的檔案。 這裡是sfilename。
iomode,選擇性參數,表示該檔案是被用來讀、寫還是追加,預設為1表示讀,2表示寫操作,8表示追加操作。
create,選擇性參數,如果檔案不存在是否建立,預設為false,如果希望進行建立,則設定為true。
format,參數可為下列設定之一,預設為ASCII格式,並沒有我們要的utf-8:
TristateUseDefault -2 以系統預設格式開啟檔案。
TristateTrue -1 以Unicode格式開啟檔案。
TristateFalse 0 以ASCII格式開啟檔案。
FSO的編碼屬性只有三種,系統預設,Unicode,ASCII,並沒有我們要的utf-8,所以一般中文系統上使用FSO組件產生的檔案都是gb2312編碼格式。
解決方案一
GB2312編碼包含俄語字母,如果版面設定為簡體中文GB2312, 那麼俄文能夠正常顯示, 但由於中文預設“宋體”顯示,在 “宋體”中俄語會顯示為全形字元,很難看,所以要採用外文字型,如“新羅馬”或“Arial”等。中國客戶那裡可以交差, 但真正的俄國人瀏覽頁面時, 就需要下載和安裝中文,很不理想, 很可能導致放棄瀏覽網頁。
解決方案二
ASP由於是一種古老的語言,它的一些功能對UTF-8支援非常差。FSO不支援直接產生UTF-8格式的檔案,因為它無法指定需要的檔案格式,比如,想產生一個UTF-8格式的檔案,使用常用的Scripting.FileSystemObject對象就不行。必須換一種思路,用Adodb.Stream,當前一些blog程式就是這樣實現的,如zblog。
Scripting.FileSystemObject 對象建立檔案的函數,是下面方式:
FileSystemObject.CreateTextFile(filename[,overwrite[,unicode]])
其中的unicode屬性是這樣描述的:
可選項。Boolean值指明是否以Unicode或ASCII檔案格式建立檔案。如果以Unicode檔案格式建立檔案,則該值為True;如果以ASCII檔案格式建立檔案,則該值為False。如果省略此部分,則假定建立ASCII檔案。
鮮然,無法用這個函數來建立UTF-8格式檔案。
使用ADODB.Stream對象,使用方法見下面: 複製代碼 代碼如下:Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Open
.Charset = "utf-8"
.Position = objStream.Size
.WriteText=str
.SaveToFile server.mappath("/sitemap.xml"),2
.Close
End With
Set objStream = Nothing

附錄:ASCII、Unicode、UTF-8介紹
ASCII是一種字元集,包括大小寫英文字母、數字、控制字元等,它用一個位元組表示,範圍是0-127。
由於ASCII表示的字元非常有限,各個國家或者地區在此基礎上提出了自己的字元集,比如在中國應用非常廣泛的GB2312,它為漢字提供了編碼,用兩個位元組表示。
這些字元集之間互不相容,相同的數字可能表示不同的字元,為資訊交流帶來了麻煩。
Unicode是一種字元集,它將世界上的所有字元對應表成一個唯一的數字(code point),比如字母a對應的數字0x0041。目前Unicode還處於發展中,它所包容的字元越來越多。
在將Unicode表示的字元進行儲存時,還需要一定的編碼方式,比如UCS-2,它用兩個位元組來表示Unicode編碼的字元。而UTF-8是Unicode字元集的另外一種編碼方式,它是變長度的,最多6個位元組,小於127的字元用一個位元組表示,與ASCII字元集的結果一樣,因而具有非常好的相容性,ASCII編碼下的英語文本不需要修改就可以當作UTF-8編碼進行處理,應用非常廣泛。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.