article:
tag:
just test

ASP > ASP?二进制与字符串互转,?另类完美解决方法,?adodb.stream?实现?By?shawl.qiu 上一篇 | 下一篇

ASP 二进制与字符串互转, 另类完美解决方法, adodb.stream 实现 By shawl.qiu


摘要:
本文实现了使用 ASP 内建组件 adodb.stream 进行任何字符集编码的 二进制转字符串 与 字符串转二进制 的互转操作.

说明:
要实现二进制流转字符串操作, 可以说很容易, 容易转换的是 us-ascii 字符集的二进制流转字符串, 到处是这种标准的资料. 

有点难度的是 gb2312字符集 二进制流转字符串, gb2312字符集 每个中文占用两个字节空间, 这很容易计算, 因为有相关资料.

高难度的是 unicode字符集 二进制流转字符串, unicode字符集 每个中文占用三个字节的空间, 我翻遍了相关的权威网站, 没有一个站点有 unicode字符集 与 二进制流 的相关介绍, 所以说是高难度. 若有相关标准文档, 干什么都很轻松, 前提是芽菜文要过关. 

最后, 经过俺差不多十小时的奋斗, 终于发现了使用 asp adodb.stream 内建组件 可以轻松的搞定任何编码的二进制流与字符串的互转. :)

目录:
1. ascii 字符集 二进制流转字符串函数
2. gb2312 字符集 二进制流转字符串函数
3. adodb.stream 字符串转二进制流函数 与 二进制流转字符串函数 及演示操作

shawl.qiu 
2006-09-26
 http://blog.csdn.net/btbtd

1. ascii 字符集 二进制流转字符串函数
    linenum
  1. <%
  2.         private function bTsAscii(bin)
  3.         '二进制转为 string (bmp|gif|png|jpg)
  4.             dim i, iByt, sByt, bLen:bLen=lenB(bin)
  5.             for i=1 to bLen
  6.                 sByt=midB(bin,i,1):iByt=ascB(sByt)
  7.                 if iByt<128 then
  8.                     bTsAscii=bTsAscii&chr(iByt)
  9.                 else:i=i+1
  10.                     if i<=bLen then bTsAscii=bTsAscii&chr(ascW(sByt&sByt))
  11.                 end if
  12.             next 'shawl.qiu code'
  13.         end function
  14. %>

2. gb2312 字符集 二进制流转字符串函数
    linenum
  1. <%  
  2.         private function bTsGb2312(bin)
  3.         '二进制转为 string | gb2312 编码
  4.             dim i, iByt, sByt, bLen:bLen=lenB(bin)
  5.             for i=1 to bLen
  6.                 sByt=midB(bin,i,1):iByt=ascB(sByt)
  7.                 if iByt<128 then
  8.                     bTsGb2312=bTsGb2312&chr(iByt)
  9.                 else
  10.                     bTsGb2312=bTsGb2312&chr(ascW(midB(bin,i+1,1)&sByt))
  11.                     i=i+1
  12.                 end if
  13.             next 'shawl.qiu code'
  14.         end function
  15. %>

3. adodb.stream 字符串转二进制流函数 与 二进制流转字符串函数 及演示操作
    linenum
  1. <%
  2.     dim str:str="adodb.stream 实现 二进制与字符串的互转 By Shawl.qiu"
  3.     
  4.         response.write "字符串转二进制 response.binaryWrite sTb(str, ""utf-8""):<br/>"
  5.         response.binaryWrite sTb(str, "utf-8")
  6.         
  7.         response.write "<p/>二进制转字符串 response.write bTs(midB(sTb(str, ""utf-8""),1),""utf-8"")<br/>"
  8.         response.write bTs(midB(sTb(str, "utf-8"),1),"utf-8")
  9.         
  10.     function sTb(str, charSet)
  11.     '''''''''''''''''''''''''''''
  12.     ' 字符串转二进制函数 By shawl.qiu
  13.     '   http://blog.csdn.net/btbtd
  14.     ''''''''''''''''
  15.     ' 参数说明
  16.     ''''''''''
  17.     ' str: 要转换成二进制的字符串
  18.     ' charSet: 字符串默认编码集, 如不指定, 则默认为 gb2312
  19.     ''''''''''
  20.     ' sample call: response.binaryWrite sTb(str, "utf-8")
  21.     '''''''''''''''''''''''''''''
  22.         dim stm_ 
  23.         set stm_=createObject("adodb.stream")
  24.             with stm_
  25.                 .type=2 
  26.                 if charSet<>"" then
  27.                     .charSet=charSet
  28.                 else
  29.                     .charSet="gb2312"
  30.                 end if
  31.                 .open
  32.                 .writeText str
  33.                 .Position = 0
  34.                 .type=1
  35.                 sTb=.Read
  36.                 .close
  37.             end with 'shawl.qiu code'
  38.         set stm_=nothing
  39.     end function
  40.     
  41.     function bTs(str, charSet)
  42.     '''''''''''''''''''''''''''''
  43.     ' 二进制转字符串函数 By shawl.qiu
  44.     '   http://blog.csdn.net/btbtd
  45.     ''''''''''''''''
  46.     ' 参数说明
  47.     ''''''''''
  48.     ' str: 要转换成字符串的二进制数据
  49.     ' charSet: 字符串默认编码集, 如不指定, 则默认为 gb2312
  50.     ''''''''''
  51.     ' sample call: response.write bTs(midB(sTb(str, "utf-8"),1),"utf-8")
  52.     '''''''''''''''''''''''''''''
  53.     ' 注意: 二进制字符串必须先用 midB(binaryString,1) 读取(可自定读取长度).
  54.     '''''''''''''''''''''''''''''
  55.         dim stm_ 
  56.         set stm_=createObject("adodb.stream")
  57.             with stm_
  58.                 .type=2 
  59.                 .open
  60.                 .writeText str
  61.                 .Position = 0
  62.                 if charSet<>"" then
  63.                     .CharSet = charSet
  64.                 else 
  65.                     .CharSet = "gb2312"
  66.                 end if
  67.                     bTs=.ReadText
  68.                 .close
  69.             end with 'shawl.qiu code'
  70.         set stm_=nothing
  71.     end function
  72. %>

@suches
http://btbtd.com/mods/blog/item.php?uid=1&item=3815

发表于 @ 2006-09-26 08:00:00

该文章暂时没有回复
评论内容:
昵称:
验证码: