Asp classic base64到浏览器的二进制输出

Asp classic base64到浏览器的二进制输出,asp-classic,Asp Classic,我在数据库中有一个作为dataurl的图像: data:image/png;base64,iVBORw0KGgoAA... 我想将图像作为文件输出到浏览器 r=split(rs("image"),";") s=split(r(1),",") imgdata=base64decode(s(1)) Response.Contenttype="image/png" response.binarywrite(imgdata) 结果文件的大小是len(imgdata)的两倍;我首先认为它只填充了8位到

我在数据库中有一个作为dataurl的图像:

data:image/png;base64,iVBORw0KGgoAA...
我想将图像作为文件输出到浏览器

r=split(rs("image"),";")
s=split(r(1),",")
imgdata=base64decode(s(1))
Response.Contenttype="image/png"
response.binarywrite(imgdata)
结果文件的大小是len(imgdata)的两倍;我首先认为它只填充了8位到16位,正如这个转储所示

0000000 2030 0050 004e 0047 000d 000a 001a 000a
0000010 0000 0000 0000 000d 0049 0048 0044 0052
0000020 0000 0000 0001 0063 0000 0000 0001 00fe
0000030 0008 0006 0000 0000 0000 0049 003a 006f
0000040 007c 0000 0000 0020 0000 0049 0044 0041
但结果文件中的另一个位置:

0000210 2014 004b 2022 00eb 203a 007e 0178 00ee
0000220 00da 00dd 00a5 007b 0178 00af 017e 00a3
0000230 003a 0066 00f6 00bd 007a 00e5 0053 00cf
存在具有高阶字节集的字

这是一个代码页问题吗


如果我从磁盘读取一个文件并进行二进制写入,那么图像就可以了。

我用以下内容替换了Base64解码:

Set objXML = Server.CreateObject("MSXml2.DOMDocument")
Set objDocElem = objXML.createElement("Base64Data")
objDocElem.DataType = "bin.base64"
objDocElem.text = s(1) 'the base64-encoded string
imgdata=objDocElem.NodeTypedValue

现在,如果您的经典asp应用程序在IIS7或IIS8中运行,则生成的图像是正确的,解码速度快100倍(非常)

。。。创建一个c#dll并将其公开给com,然后使用Convert.FromBase64会更容易。我对整个文本名称空间都这样做了,我甚至公开了一个StringBuilder com,我可以在经典asp中调用它。例如,Server.CreateObject(“XYZ.Text.StringBuilder”)。这是因为经典asp可以在集成模式下与.Net CLR并排运行。自2008年r2推出3.5版和sp 1推出4.5.2版以来,这些服务器上已经有了.Net CLR。windows 2012推出4.5版。谢谢,但我下面回答中的4行内容对我来说很简单,也很有用。是的,这可能不是最有效或性能最好的方法,如果它稍后会导致问题或速度非常慢,请重新考虑com+dll的想法,它很容易实现,而且速度非常快。没问题,映像还是缓存的。