文章背景:
某天,我的一個同事給我看了CSDN上面的一篇關(guān)于編程語言排行榜的文章,里面我看到VB還是排名很不錯的,我就說,asp(vbscript)確實挺不錯。結(jié)果他就反駁我,說asp不好,很多東西很難實現(xiàn)。我說比如哪些東西?我開發(fā)了幾年的asp都沒有發(fā)現(xiàn)很難實現(xiàn)的東西,除非是屬于非腳本語言范圍內(nèi)的,比如多線程的應(yīng)用(當然,asp也可以模擬實現(xiàn)多線程任務(wù))等。結(jié)果他說了什么多線程,還有編碼轉(zhuǎn)換等,說自己曾經(jīng)為了轉(zhuǎn)換編碼費了很大精力卻沒有成功過,所以覺得asp太弱。聽到這樣的話,我們就知道他的編程底子還不夠扎實,并且對asp認識也是非常有限的(并且后來說自己asp幾個常用的基本對象都不知道,也沒有用過,我差點被氣暈過去——連這都沒有用過,還跟我談asp很弱,看來...白長著么大了,連“沒有根據(jù),沒有發(fā)言權(quán)”都不懂!呵呵...),所以,我一氣之下,在那個周末就把asp編碼互轉(zhuǎn)的問題給實現(xiàn)了,讓他見識見識什么是asp,竟然這么看不起asp,想著就火大!當然,我的這個研究也同時填補了到目前為止關(guān)于asp開發(fā)中編碼轉(zhuǎn)換研究的空白!
現(xiàn)在,我們開始轉(zhuǎn)入正題,首先,我們了解一下編碼轉(zhuǎn)換的過程,一段文字的編碼如果要轉(zhuǎn)換,我們就要知道當前文字所對應(yīng)的編碼集,然后用對應(yīng)的編碼集去讀取,這是編碼正確被轉(zhuǎn)換的前提(如果這步弄錯了,那么轉(zhuǎn)換出來的就會是一連串亂碼)!好了,找對了當前編碼,并且正確讀取出來了以后,我們就可以用設(shè)定好目標編碼的Stream對象去保存這個內(nèi)容到指定文件中了,到這里我們的編碼轉(zhuǎn)換就成功了!
下面我們來看一下asp編碼轉(zhuǎn)換的具體代碼實現(xiàn):
復(fù)制代碼 代碼如下:
'轉(zhuǎn)換編碼 content 要轉(zhuǎn)換編碼的內(nèi)容, cset 目標編碼, dest 目標文件絕對路徑
Function TransferCharSet(content, cset, dest)
Dim Objstream
Set Objstream = Server.CreateObject("adodb.stream")
objstream.Mode =3
objstream.Charset = cset
objstream.Type = 2
objstream.Open
objstream.WriteText content
objstream.Position = 0
objstream.SaveToFile dest,2
objstream.Close
set objstream = nothing
End Function
'用對應(yīng)編碼讀取指定內(nèi)容
Function getcontent(path)
Dim Objstream
Set Objstream = Server.CreateObject("Adodb.Stream")
objstream.Charset = GetCharSetName(path)
objstream.Type = 2
objstream.Mode =3
'objstream.Charset = code
objstream.Open
Objstream.LoadFromFile path
objstream.Position = 0
getcontent = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
'取得指定內(nèi)容的編碼名稱
Function GetCharSetName(path)
Set objstream=server.createobject("Adodb.Stream")
objstream.Type=1
objstream.mode=3
objstream.open
objstream.Position=0
objstream.loadfromfile path
bintou=objstream.read(2)
If AscB(MidB(bintou,1,1))=HEF And AscB(MidB(bintou,2,1))=HBB Then
GetCharSetName="utf-8"
ElseIf AscB(MidB(bintou,1,1))=HFF And AscB(MidB(bintou,2,1))=HFE Then
GetCharSetName="unicode"
Else
GetCharSetName="gb2312"
End If
objstream.close
Set objstream=nothing
End Function
好了,經(jīng)過這樣一段代碼,我們的轉(zhuǎn)換工作就完成了!希望這篇文章能給asp愛好者以及其他語言愛好者帶來一些幫助和啟發(fā)。
最后,我想說的是,編程語言的學(xué)習(xí)和使用并不難,重要的是自己多動腦筋,想想自己需要的功能怎么去實現(xiàn),而不是怨天尤人,說這個語言太弱了之類的話。
好了,祝大家編程并快樂著,關(guān)于asp的編碼轉(zhuǎn)換先寫到這里,以后我還會推出更精彩的個人原創(chuàng)文章,謝謝大家!