自编Base64编码,找不到错误,请大家帮忙看看

smartcatiboy 2009-07-27 11:17:56
B64Encode是自己编的B64编码;XmlB64encode是调用xml编码(用于参照)

结果总是有一两个字符编码错误,找了几个小时找不到原因,请大家帮忙看看。

比方"我爱你",我的编码显示为EWIxcmBP,标准编码EWIxcmAP


public function B64Encode(byval strData)
dim i,j,a,b,e
dim A1,A2,A3,A4,B1,B2,B3,B4
dim lngSurffix
dim strRet

lngSurffix=(lenb(strData) mod 3) '需要补足的字符

for i=0 to lenb(strData)\3-1
A1=ascb(midb(strData,i*3+1,1))
A2=ascb(midb(strData,i*3+2,1))
A3=ascb(midb(strData,i*3+3,1))
B1= ((A1 and 252)\04)
B2=((A1 and 03)*16) or ((A2 and 240)\16)
B3=((A2 and 15)*04) or ((A4 and 192)\64)
B4=((A3 and 63)*01)
strRet=strRet & mc_astrB64Alphabet(B1) & mc_astrB64Alphabet(B2) & mc_astrB64Alphabet(B3) & mc_astrB64Alphabet(B4)
next

if lngSurffix=1 then
A1=ascb(midb(strData,i*3+1,1))
B1= ((A1 and 252)\04)
B2=((A1 and 03)*16)
strRet=strRet & mc_astrB64Alphabet(B1) & mc_astrB64Alphabet(B2) & "=="
elseif lngSurffix=2 then
A1=ascb(midb(strData,i*3+1,1))
A2=ascb(midb(strData,i*3+2,1))
B1= ((A1 and 252)\04)
B2=((A1 and 03)*16) or ((A2 and 240)\16)
B3=((A2 and 15)*04)
strRet=strRet & mc_astrB64Alphabet(B1) & mc_astrB64Alphabet(B2) & mc_astrB64Alphabet(B3) & "="
end if

B64Encode=strRet
end function

'调用xml的编码,用于参照
function XmlB64Encode(strData)
dim objAds,objXd
set objAds=createobject("adodb.stream")
objAds.Type=2
objAds.charset="unicode"
objAds.mode=3
call objAds.open()
objAds.writeText strData
objAds.Position=0
objAds.Type=1
objAds.Position=2

set objXd=createobject("msxml.domdocument")
call objXd.loadXml("<root/>")
objXd.DocumentElement.DataType="bin.base64"
objXd.DocumentElement.NodeTypedValue=objAds.read()
XmlB64Encode=objXd.DocumentElement.text
end function

debug:sub debug()
a="我爱你"
msgbox B64Encode(a) & vbcrlf & XmlB64Encode(a)
end sub
...全文
69 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartcatiboy 2009-07-28
  • 打赏
  • 举报
回复
晕死,居然在这里,找了2天没找出来。

谢谢
hookee 2009-07-28
  • 打赏
  • 举报
回复
这句写错了
B3=((A2 and 15)*04) or ((A4 and 192)\64)
A4改成A3
 
B3=((A2 And 15)*04) Or ((A3 And 192)\64)
mocom 2009-07-28
  • 打赏
  • 举报
回复
没发现,我这边用你的函数运行的结果就是EWIxcmAP
smartcatiboy 2009-07-28
  • 打赏
  • 举报
回复
up
smartcatiboy 2009-07-28
  • 打赏
  • 举报
回复
继续up
smartcatiboy 2009-07-27
  • 打赏
  • 举报
回复
mc_astrB64Alphabet=Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",_
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",_
"0","1","2","3","4","5","6","7","8","9","+","/")

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧