为测试用Adodb.Stream中文转码,写了个函数
Function Encode()
dim ax,stm
ax=chrb(233)&chrb(152)&chrb(191)
Set stm = server.CreateObject("Adodb.Stream")
stm.mode = 3
stm.Type = 1
stm.Open
stm.Write ax
stm.Position = 0
stm.Type = 2
stm.charset = "utf-8"
Encode = stm.readtext
stm.close
Set stm=nothing
End Function
结果:
ADODB.Stream
错误 '800a0bb9'
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
原来是变量类型错误,输入的变量必须是单字节数组,上面的 AX成了字符串了,故出错。
excel里面简单更改后正确:
Sub Encode()
Dim ax() As Byte, stm, Encodex
ReDim ax(2)
ax(0) = 233
ax(1) = 152
ax(2) = 191
Set stm = CreateObject("Adodb.Stream")
stm.Mode = 3
stm.Type = 1
stm.Open
'//stm.LoadFromFile filePath
stm.Write ax
stm.Position = 0
stm.Type = 2
stm.Charset = "utf-8"
Encodex = stm.ReadText
stm.Close
Set stm = Nothing
End Sub
另外一段会造成这个错误的代码如下:
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData,CLStr&CLStr)+4 '4是两对回车换行符的长度
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize) 'midb这个处理出来的二进制流串根本不能用于ADODB.Stream .Write提交
set str=server.CreateObject("ADODB.Stream") 'str为源数据流
str.Mode=3 '设置打开模式,3为可读可写
str.Type=1 '设置数据类型,1为二进制数据
str.Open
str.Write FormData '这里必然报错
上面的这个代码想当然的使用MIDB来处理二进制流,殊不知,MIDB返回的已经不再是二进制流,而是变成了单个长字符串,所以根本不能这样用,被这段代码害了一个晚上。。。。。
ADODB.Stream .Write '的输入参数在ASP里面正确的做法是 .copyto write_stream,second_enter-first_enter-3, 利用 .copyto直接截取字节流