获取访问二元响应逐字节在传统的ASP / JScript的

问题描述 投票:2回答:3

我问这个问题,前几天,但它似乎已经相当快凉了。我想要做的是非常简单的,我不认为有人没有意识到这一点。

解决方案需要的JScript传统的ASP。我读从远程服务器上的文件,我想处理我的服务器上(二进制)文件,并吐出的结果返回给客户端的XML。

这里是什么,我试图做一个简化版本。此代码运行,或将网址只要填写您的网站。此文件是readbin.asp。它读取一个名为文件TEST.bin,烧写,并将结果写入到流。我用了一个流,因为这使得它更容易读取文件和解析的内容。基本上我想:

while not end of stream
    read byte from stream
    process byte

这里是readbin.asp:

<%@ LANGUAGE = JScript %>
<%
var url = "http:// (... your URL to the file test.bin goes here...) " ; 
var xmlhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP") ;
xmlhttp.open ("GET", url, false) ; 
xmlhttp.send () ; 

var BinaryInputStream = Server.CreateObject ("ADODB.Stream") ;
BinaryInputStream.Type = 1 ; // binary
BinaryInputStream.Open ;
BinaryInputStream.Write (xmlhttp.responseBody) ;
BinaryInputStream.Position = 0 ;

Response.Write ("BinaryInputStream.size = " + BinaryInputStream.size + "<br>") ;
Response.Write ("BinaryInputStream = " + BinaryInputStream + "<br>") ;

var ByteValue = BinaryInputStream.read (1) ;
Response.Write ("ByteValue = " + ByteValue + "<br>") ;
Response.Write ("typeof (ByteValue) = " + typeof (ByteValue) + "<br>") ;
%>

我的问题是:我如何才能作为的byteValue一些0..255? typeof运算(的byteValue)是 “未知”。

奥德?掉期()? ASC? CHR 13

asp-classic binary stream
3个回答
0
投票

你可能想看看这段代码:http://docs.hyperweb.no/source/asplib1.2/util/fileupload.asp

此代码是用于处理上传的文件。这实在是很相似的: - 在线224二进制请求被读入一个流对象。 - 在线232中的数据被读回为ISO-8859-1文本,这是你想要什么几乎 - 然后,您可以通过使用在线48上的了getByte()函数读取此字符串的每个字节该函数使用查找表第33行修复ceratin是让转换为Unicode字符。


0
投票

我老练多了VBScript的JScript的相比,但我会给它,因为在这个问题上没有多少考生出手了。 状态有TYPEOF回报六种可能的值:“数量”,“串”,“布尔”,“对象”,“功能”和“不确定”。 http://msdn.microsoft.com/en-us/library/259s7zc1(VS.85).aspx 所述ADODB.Stream .Read对象和方法返回一个变型的数据类型。我怀疑的typeof不喜欢变型数据类型。 http://www.w3schools.com/ado/ado_ref_stream.asp 从这个家伙的发布似乎有点进一步解释。 http://blogs.msdn.com/jaiprakash/archive/2007/01/09/jscript-supports-safearrays-of-variants-only.aspx 我会尝试应用的typeof它之前铸造返回流。


0
投票

也许不完全的话题,但使用VBScript我写了这个:

option explicit
dim fso, wshSHell, objShellApp, args, stdin,stdout

set fso         = CreateObject("Scripting.FileSystemObject")
Set wshShell    = CreateObject("WScript.Shell")
set objShellApp = CreateObject("Shell.Application")
Set args = Wscript.Arguments
set stdin = wscript.stdin
set stdout = wscript.stdout

dim filename, txtFile

filename = args(0)

Const adTypeBinary = 1

'Create Stream object
Dim BinaryStream, data
Set BinaryStream = CreateObject("ADODB.Stream")

'Specify stream type - we want To get binary data.
BinaryStream.Type = adTypeBinary

'Open the stream
BinaryStream.Open

'Load the file data from disk To stream object
BinaryStream.LoadFromFile filename

'Open the stream And get binary data from the object
data = BinaryStream.Read
BinaryStream.close

dim i, item, strLine, hexLine
hexLine = ""
strLine = ""

stdout.writeline "Decimal |Hex     |Data                                             | ASCII 33-254"
for i = 0 to lenb(data)-1
  item = ascb(midb(data,i+1,1))
  if ((i MOD 16) = 0) and (i<>0) then
    stdout.writeLine right("00000000" & i,8) & "|" & right("00000000" & hex(i),8) & "|" &  hexLine & " | " & strLine
    hexLine = ""
    strLine = ""
  end if
  hexLine = hexLine & right("0" & hex(item),2) & " "
  if (item <= 32) or (item > 254) then 
    strLine=strLine + "."
  else
    strLine = strLine & chr(item)
  end if
next

键向此溶液是要知道变量“数据”包含一个字节数组。可以通过使用函数LENB(字节阵列的长度)和MIDB(以提取一个或更多个字节)处理的。

运行该脚本如下:

cscript dumphex.vbs my_binary_file.bin > my_binary_file.hex.txt

这将输出到标准输出的所有二进制文件数据的十六进制代码。的16个进制码的每一行是由字节数的小数+进制计数器前缀。最后一列显示33和254之间可读的ASCII。

也很大规避,如果你想看到只是在你的ASCII文件的确切代码的解释您的UTF-8编码,那恼人的编辑器。

© www.soinside.com 2019 - 2024. All rights reserved.