ASCII介紹


Tek 發表



ASCII及編/解碼函數解介

New Page 2

ASCII介紹 (編/解碼Script程式範本)

ASCII,為"American Standard Code for Information Interchange"的英文縮寫•
譯美國資訊交換標準碼• 一種電腦文字型資料來表示所用的標準•只包含單一位元組且會編碼
字元的配置• ASCII採用指定的七位元或八位元數字組合表示128或者256個可能字元... 以七位元
表示英文大小寫字母、數字0~9、標點符號、或其他特殊字元• 也許有些人不常見到這一種code,
不過您也許會在你Windows記事本 > 存檔上看到這種編碼的影子(例如Windows 2000)• 在Visual
Basic Scripting上(簡稱VBS),我們可以利用chr()函數做ASCII解碼動作,而用asc()函數編碼•
asc()麻煩的地方,就在於asc只會幫您處理整個字串的第一個字做編碼/解碼動作•chr()呢?
更麻煩... 看下去就知道了....

編碼...
<script language=vbs>
Dim char, encode
char = "abcdefg" '原字串
encode = asc(char) '對上面字串編碼
document.write(encode)

</script>

結果:
97

錯誤解碼:
<script language=vbs>
Dim char, encode
char = "8899" '原字串
encode = chr(char) '對上面字串編碼
document.write(encode)

</script>

結果(傳會錯誤):
錯誤: Invalid procedure call or argument: 'chr'

chr()比較特別,基本上不可以對一大堆字串做解碼...它只接受一個編碼的數字

解碼:
<script language=vbs>
Dim char, encode
char = "88" '原字串
encode = chr(char) '對上面字串編碼
document.write(encode)

</script>

結果:
X

注意編碼的字串可以是string或者是integer•

但難道就沒有辦法處理一整串字串的編碼嗎? 當然也不是不行,要不然我也不會再提到這
一個問題阿... 編碼的話算是最簡單的,可以只要用迴圈就解決問題• 解碼的話,則需要用
到regexp物件跟迴圈做重要角色• 當然,兩者都要用上自己需要的asc()或chr()函數!
範本:

<Script Language="VBScript">
'Author: Tek (tek1e@netscape.net)
'Caution: In order to share this script, you are responsible to
' maintain the author comment above. Please no not
' modify it!
function ascii(str1)
dim tek, match, result, tail
tail = ""
if len(trim(mid(str1,instrrev(str1," "),len(str1)))) = 2 then
tail = chr(mid(str1,instrrev(str1," "),len(str1)))
end if
set tek = new regexp
with tek
.pattern = "\d.."
.ignorecase = true
.global = true
end with
set matches = tek.execute(str1)
for each match in matches
result = result & chr(match.value)
next
ascii = result & tail
document.myform.content.value = ascii
end function
sub process(level)
dim mychar
mychar = document.myform.content.value
select case level
case 1
dim checking
checking = replace(mychar," ","")
if isempty(mychar) = true then
msgbox "Empty information",16,"Error"
else
call ascii(mychar)
end if
case 2
if isempty(mychar) = true then
msgbox "Cannot accept empty data",16,"Error"
else
dim ele, encoded_result
for ele = 1 to len(mychar) step 1
encoded_result = encoded_result & asc(mid(mychar,ele,1)) & " "
next
document.myform.content.value = encoded_result
end if
end select
end sub
with document
.write "<form name='myform'>"
.write "<b>ASCII Decode/Encode tool</b>" & "<br>"
.write "<textarea rows='15' cols='50' name='content'></textarea>" & "<br>"
.write "<input type='button' onclick='process(2)' value='Encode'>"
.write "<input type='button' onclick='process(1)' value='Decode'>"
.write "<input type='reset' value='Reset'>"
.write "</form>"
end with

</script>

這一個算是一個原始Script,我還沒做什麼修改...
這一個Script包括了編碼及解碼的服務• 可以去玩看看... 不過注意按Decode前
您的輸入欄必須是ASCII編碼後的東西,否則只會跑出一個錯誤... 每一個code之間必須要一個
空格(程式才有辦法判斷),例如:
88 77 120 89
錯誤:
887712089

不過... 注意你必須要輸入兩個編碼字元以上的編碼字元,否則也會錯誤(因為我在寫的時候
忘了只解碼一個字的問題^_^||| 我只把精神放在處理大量字串處理上面... 這也是我唯一寫這一
個Script的目地•)

在最後,我想稍微套一句Coobila(酷必網)站長阿得(Tek的朋友)的話...

不過你要記得, 一個字元改成用兩位數字來表示, 這也意味著檔案大小會比原來的大一倍...
就拿酷必網的網頁來講, 大小約有30kdouble以後算60k好了60k的資料經過for loop和document.write 一個字元解 (而且是二位數/三位數數字轉換成一個字元),這會花上不少時間
...這是一些效能上的考量啦

最後更新日期: 10/8/2002 7:33:49 AM