Base64解码的问题!我只有这么点分了(20分)

  • 主题发起人 puppyboy
  • 开始时间
P

puppyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Asp中调用WebService服务,得到一个经过Base64编码的XML文件,但是
我在Asp中解码之后,Response.write写不出来,写入文件看,内容也只有一部分
对,其它是乱码。解码的程序是从网上copy的,应该没问题,就是对接收到的
字符串进行解码操作。
请问各位是怎么回事?怎么处理。我只有这么多分了!
 
贴出你的代码来
 
哈哈,我用过pem编码传http数据,有个别字符会变,不知是否和你相同
gz
 
Asp 无法写非文本文件.
 
问题我已经找到,我的那个编码解码程序不支持中文,用英文是对的,关键是
程序怎么写呢?
 
英文一般不用编码就可传输,需要编码的也就是中文和其他一些非英文的
字符(如加密产生的乱码),所以你的发现,我认为还没解决问题,再支持
 
原来的代码是这样的,但它对中文编码解码之后不对:
Const sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Function Base64encode(ByVal asContents)
Dim lnPosition
Dim Lsresult
Dim Char1
Dim Char2
Dim Char3
Dim Char4
Dim Byte1
Dim Byte2
Dim Byte3
Dim Savebits1
Dim Savebits2
Dim Lsgroupbinary
Dim Lsgroup64
If Len(asContents) Mod 3 > 0 then
asContents = asContents &
String(3 - (Len(asContents) Mod 3), " ")
lsResult = ""
For lnPosition = 1 To Len(asContents) Step 3
lsGroup64 = ""
lsGroupBinary = Mid(asContents, lnPosition, 3)

Byte1 = Asc(Mid(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = Asc(Mid(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = Asc(Mid(lsGroupBinary, 3, 1))
Char1 = Mid(sBASE_64_CHARACTERS, ((Byte1 And 252) / 4) + 1, 1)
Char2 = Mid(sBASE_64_CHARACTERS, (((Byte2 And 240) / 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Mid(sBASE_64_CHARACTERS, (((Byte3 And 192) / 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
Char4 = Mid(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1)
lsGroup64 = Char1 &
Char2 &
Char3 &
Char4
lsResult = lsResult + lsGroup64
Next
Base64encode = lsResult
End Function

Function Base64Decode(base64String)
Const Base64CodeBase = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim dataLength, Out, groupbegin
dataLength = Len(base64String)
Out = ""
If dataLength Mod 4 <> 0 then
Err.Raise 1, "Base64Decode", "Bad Base64 string."
Exit Function
End If
For groupbegin
= 1 To dataLength Step 4
Dim numDataBytes, CharCounter, thisChar, thisData, groupData
numDataBytes = 3
groupData = 0
For CharCounter = 0 To 3
thisChar = Mid(base64String, groupbegin
+ CharCounter, 1)
If thisChar = "=" then
numDataBytes = numDataBytes - 1
thisData = 0
else
thisData = InStr(Base64CodeBase, thisChar) - 1
End If
If thisData=-1 then
Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
Exit Function
End If
groupData = 64 * groupData + thisData
Next
Dim OneChar
For CharCounter = 1 To numDataBytes
Select Case CharCounter
Case 1: OneChar = groupData / 65536
Case 2: OneChar = (groupData And 65535) / 256
Case 3: OneChar = (groupData And 255)
End Select
Out = Out &amp;
Chr(OneChar)
Next
Next
Base64Decode = Out
End Function
 
编码后若产生'+'等,在后台就会变' '.
为什么必须编码,用socket传就不需要了。
 
同意 一生所爱的观点。
英文是单字节,编码简单。而且delphi和kylix都有控件。kylix中还有源代码。
现在主要是对中文的pem编码问题。
outlook和foxmail应该解决了这样的问题,我猜想是不是把汉字拆成两个单字节然后再
用原来的方法编码呢?
不过,怎样还原成原来的汉字呢
 
顶部