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

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

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


评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值