ASP實(shí)現(xiàn)GB2312字符與區(qū)位碼的相互轉(zhuǎn)換的代碼
更新時(shí)間:2007年05月11日 00:00:00 作者:
研究編碼,得知GB2312編碼與區(qū)位碼的關(guān)系,嘗試之后,得此程序。
搜索,似乎沒人寫,故發(fā)此地。
原創(chuàng)首發(fā):
http://bbs.blueidea.com
http://mytju.com/classcode/
任意轉(zhuǎn)載,任意使用。
1.簡述
(1)GB2312標(biāo)準(zhǔn)的定義,其實(shí)就是區(qū)位碼。
共94行,94列,行就是區(qū)號(hào),列就是位號(hào)。
如“啊”字區(qū)號(hào)為16,位號(hào)為01,它的區(qū)位碼就是1601。
(2)每個(gè)字符由區(qū)號(hào)+位號(hào)組成,共占兩個(gè)字節(jié)。
每個(gè)字節(jié)都是01-94,與通信控制符0-31沖突,
所以,將區(qū)號(hào)和位號(hào)分別加上32,以避免沖突。
(3)由上,每個(gè)字節(jié)是33-126,與ASCII編碼0-127沖突,
所以將最高位置為1,也就是加上128,以避免沖突。
所以,最終,每個(gè)字節(jié)為161-254。
2。實(shí)現(xiàn)
原理很簡單,加加減減即可實(shí)現(xiàn)。
直接將我完成的函數(shù)帖于此處。
'----取得區(qū)位碼的函數(shù)---------------------
Function CharToQWM(byVal str)
dim sHex,sHigh,sLow,iLow,iHigh,sResult
sHex=Hex(Asc(str)) '取得字符的內(nèi)碼的編碼,如B0A1,此編碼是正確的順序,不必交換高低位。
sHigh=Left(sHex,2) '取得編碼的高位,如B0。
sLow=Right(sHex,2) '取得編碼的低位,如A1。
'GB2312內(nèi)碼范圍為&HA1A1--&HFEFE,每個(gè)字節(jié)都在A1-FE之間。
if NOT (sHigh>="A1" AND sHigh<="FE") then
CharToQWM=""
Exit Function
end if
if NOT (sLow>="A1" AND sLow<="FE") then
CharToQWM=""
Exit Function
end if
'GB交換碼僅使用了7位,高位置1,即為內(nèi)碼。反過來就是將高位置0,可得到交換碼。
iLow=Clng("&H" & sLow)-128
iHigh=Clng("&H" & sHigh)-128
'區(qū)位碼與控制碼0-31沖突,所以加上32之后,即是交換碼。反過來減去32即可。
iLow=iLow-32
iHigh=iHigh-32
'OK,區(qū)位碼已經(jīng)得到。
sResult=""
if iHigh<10 then
sResult = sResult & "0" & Cstr(iHigh)
else
sResult = sResult & Cstr(iHigh)
end if
if iLow<10 then
sResult = sResult & "0" & Cstr(iLow)
else
sResult = sResult & Cstr(iLow)
end if
CharToQWM=sResult
End Function
'----根據(jù)區(qū)位碼得到字符的函數(shù)---------------------
Function QWMToChar(byVal str,byVal doCheckFlg)
dim sHex,sHigh,sLow,iLow,iHigh,sResult
'-------------檢查輸入格式--------------
if doCheckFlg then
if Len(str)<>4 then
QWMToChar=""
Exit Function
end if
'--4位必須都是數(shù)字
dim i,iAsc
for i=1 to 4
iAsc=Asc(mid(str,i,1))
if NOT (iAsc>=&H30 AND iAsc<=&H39) then
QWMToChar=""
Exit Function
end if
next
'--區(qū)號(hào),位號(hào)都要在01-94之間
iHigh=Clng(Left(str,2))
iLow=Clng(Right(str,2))
if NOT (iHigh>=1 AND iHigh<=94) then
QWMToChar=""
Exit Function
end if
if NOT (iLow>=1 AND iLow<=94) then
QWMToChar=""
Exit Function
end if
end if
'-------------檢查完畢------------------
iHigh=Clng(Left(str,2))
iLow=Clng(Right(str,2))
iHigh=iHigh + 32 + 128
iLow=iLow + 32 + 128
sHex=Hex(iHigh) & Hex(iLow)
QWMToChar=Chr("&H" & sHex)
End Function
使用方法:
-----------------------------------------------------------------------------------------------------
dim i,str,sChar
str="娃哈哈"
for i=1 to Len(str)
sChar=Mid(str,i,1)
Response.write sChar & ":" & CharToQWM(sChar) &"<br>"
next
-----------------------------------------------------------------------------------------------------
dim str
str="1601|1602|1603}
if instr(str,"|")>0 then
dim s,sCharArray,i
sCharArray=Split(str,"|")
for i=0 to Ubound(sCharArray)
s=s & QWMToChar(trim(sCharArray(i)),True)
next
str=s
else
str=QWMToChar(str,True)
end if
.......
-----------------------------------------------------------------------------------------------------
3.在線使用
http://www.mytju.com/classcode/tools/quweima.asp
進(jìn)入以上網(wǎng)址即可在線查閱。
搜索,似乎沒人寫,故發(fā)此地。
原創(chuàng)首發(fā):
http://bbs.blueidea.com
http://mytju.com/classcode/
任意轉(zhuǎn)載,任意使用。
1.簡述
(1)GB2312標(biāo)準(zhǔn)的定義,其實(shí)就是區(qū)位碼。
共94行,94列,行就是區(qū)號(hào),列就是位號(hào)。
如“啊”字區(qū)號(hào)為16,位號(hào)為01,它的區(qū)位碼就是1601。
(2)每個(gè)字符由區(qū)號(hào)+位號(hào)組成,共占兩個(gè)字節(jié)。
每個(gè)字節(jié)都是01-94,與通信控制符0-31沖突,
所以,將區(qū)號(hào)和位號(hào)分別加上32,以避免沖突。
(3)由上,每個(gè)字節(jié)是33-126,與ASCII編碼0-127沖突,
所以將最高位置為1,也就是加上128,以避免沖突。
所以,最終,每個(gè)字節(jié)為161-254。
2。實(shí)現(xiàn)
原理很簡單,加加減減即可實(shí)現(xiàn)。
直接將我完成的函數(shù)帖于此處。
復(fù)制代碼 代碼如下:
'----取得區(qū)位碼的函數(shù)---------------------
Function CharToQWM(byVal str)
dim sHex,sHigh,sLow,iLow,iHigh,sResult
sHex=Hex(Asc(str)) '取得字符的內(nèi)碼的編碼,如B0A1,此編碼是正確的順序,不必交換高低位。
sHigh=Left(sHex,2) '取得編碼的高位,如B0。
sLow=Right(sHex,2) '取得編碼的低位,如A1。
'GB2312內(nèi)碼范圍為&HA1A1--&HFEFE,每個(gè)字節(jié)都在A1-FE之間。
if NOT (sHigh>="A1" AND sHigh<="FE") then
CharToQWM=""
Exit Function
end if
if NOT (sLow>="A1" AND sLow<="FE") then
CharToQWM=""
Exit Function
end if
'GB交換碼僅使用了7位,高位置1,即為內(nèi)碼。反過來就是將高位置0,可得到交換碼。
iLow=Clng("&H" & sLow)-128
iHigh=Clng("&H" & sHigh)-128
'區(qū)位碼與控制碼0-31沖突,所以加上32之后,即是交換碼。反過來減去32即可。
iLow=iLow-32
iHigh=iHigh-32
'OK,區(qū)位碼已經(jīng)得到。
sResult=""
if iHigh<10 then
sResult = sResult & "0" & Cstr(iHigh)
else
sResult = sResult & Cstr(iHigh)
end if
if iLow<10 then
sResult = sResult & "0" & Cstr(iLow)
else
sResult = sResult & Cstr(iLow)
end if
CharToQWM=sResult
End Function
'----根據(jù)區(qū)位碼得到字符的函數(shù)---------------------
Function QWMToChar(byVal str,byVal doCheckFlg)
dim sHex,sHigh,sLow,iLow,iHigh,sResult
'-------------檢查輸入格式--------------
if doCheckFlg then
if Len(str)<>4 then
QWMToChar=""
Exit Function
end if
'--4位必須都是數(shù)字
dim i,iAsc
for i=1 to 4
iAsc=Asc(mid(str,i,1))
if NOT (iAsc>=&H30 AND iAsc<=&H39) then
QWMToChar=""
Exit Function
end if
next
'--區(qū)號(hào),位號(hào)都要在01-94之間
iHigh=Clng(Left(str,2))
iLow=Clng(Right(str,2))
if NOT (iHigh>=1 AND iHigh<=94) then
QWMToChar=""
Exit Function
end if
if NOT (iLow>=1 AND iLow<=94) then
QWMToChar=""
Exit Function
end if
end if
'-------------檢查完畢------------------
iHigh=Clng(Left(str,2))
iLow=Clng(Right(str,2))
iHigh=iHigh + 32 + 128
iLow=iLow + 32 + 128
sHex=Hex(iHigh) & Hex(iLow)
QWMToChar=Chr("&H" & sHex)
End Function
使用方法:
-----------------------------------------------------------------------------------------------------
復(fù)制代碼 代碼如下:
dim i,str,sChar
str="娃哈哈"
for i=1 to Len(str)
sChar=Mid(str,i,1)
Response.write sChar & ":" & CharToQWM(sChar) &"<br>"
next
-----------------------------------------------------------------------------------------------------
dim str
str="1601|1602|1603}
if instr(str,"|")>0 then
dim s,sCharArray,i
sCharArray=Split(str,"|")
for i=0 to Ubound(sCharArray)
s=s & QWMToChar(trim(sCharArray(i)),True)
next
str=s
else
str=QWMToChar(str,True)
end if
-----------------------------------------------------------------------------------------------------
3.在線使用
http://www.mytju.com/classcode/tools/quweima.asp
進(jìn)入以上網(wǎng)址即可在線查閱。
相關(guān)文章
ASP與Excel結(jié)合生成數(shù)據(jù)表和Chart圖的代碼
ASP與Excel結(jié)合生成數(shù)據(jù)表和Chart圖的代碼,需要的朋友可以參考下。2009-12-12asp 實(shí)現(xiàn)顯示所有的服務(wù)器變量值的函數(shù)
asp 實(shí)現(xiàn)顯示所有的服務(wù)器變量值的函數(shù)...2007-08-08asp下讓數(shù)據(jù)庫在需要讀取的時(shí)候才打開
ASP實(shí)現(xiàn)讓數(shù)據(jù)庫連接僅在需要讀取數(shù)據(jù)庫時(shí)打開,我們有沒有辦法讓數(shù)據(jù)庫連接僅在需要讀取數(shù)據(jù)庫時(shí)才打開,不讀取時(shí)就沒有任何動(dòng)作呢,以下即提供這種思路,以求拋磚引玉。2008-06-06IIS7.5調(diào)用asp頁面出現(xiàn)800a0e7a的解決辦法
本文給大家分享的是在windows2008R2 64位系統(tǒng)中出現(xiàn)了ADODB.Connection 錯(cuò)誤 '800a0e7a'的解決辦法,方法很簡單,可是處理過程卻很曲折,這里推薦給大家,有需要的小伙伴可以參考下。2015-05-05ASP實(shí)現(xiàn)智能搜索實(shí)現(xiàn)代碼
asp下智能搜索功能的實(shí)現(xiàn),方便大家學(xué)習(xí)2008-06-06PJ-Blog教程┊增強(qiáng)博客用戶體驗(yàn)~讓發(fā)表內(nèi)容的同時(shí)拷貝到剪貼板以防丟失
PJ-Blog教程┊增強(qiáng)博客用戶體驗(yàn)~讓發(fā)表內(nèi)容的同時(shí)拷貝到剪貼板以防丟失...2007-01-01