Классический ASP response.write или response.Binarywrite, имеющий проблемы с chr (0) - PullRequest
0 голосов
/ 12 июня 2009

У меня проблема с записью файла в объект ответа. Файл имеет кодировку Base64 и отправляется в код ASP через веб-службу.

dim contentType, fileName

filename = request("FileName")
contentType = request("ContentType")
If Not Response.isClientConnected Then
    Response.end
End If
Response.buffer = true
Response.Clear
Response.Addheader "Content-Disposition", "attachment; filename=" & filename
Response.contenttype = contentType

dim oSoapClient
Set oSoapClient = Server.CreateObject("MSSOAP.SoapClient")
oSoapClient.ClientProperty("ServerHTTPRequest") = True
oSoapClient.mssoapinit "http://myWS/test.asmx?WSDL"
dim sRequest, sResponse
sRequest = "<Root><Attachment id=""" & Request("ID") & """/></Root>"          
sResponse = oSoapClient.GetAttachment(sRequest)  
Dim oXML: Set oXML = LoadXMLString(sResponse)

Dim oAttachment
set oAttachment = oXML.SelectSingleNode("/Root/Attachment")
if not oAttachment is nothing then
    Response.Binarywrite(Base64Decode(oAttachment.attributes.getNamedItem("BinaryData").value))

End if
Response.End

BinaryWrite добавляет дополнительные нулевые символы в каждый второй байт. Измените его на response.write, и он не ставит нулевые значения, а завершает строку, если обнаружен нулевой символ

Я ищу метод для использования бинарного текста без добавления дополнительных нулей. Это проблема с кодировкой?

Спасибо

1 Ответ

0 голосов
/ 12 июня 2009

BinaryWrite делает все правильно здесь. Каков тип возврата для вашей функции Base64Decode ? Дополнительные нулевые символы между каждым байтом являются признаком неправильной обработки данных Unicode UTF-16 / UCS-16.

В идеале, вы должны отправить VARIANT в BinaryWrite, который представляет объект, представляющий IStream, или SAFEARRAY. Если вы отправите VARIANT, который является строкой, он будет получен BinaryWrite как BSTR, который имеет ширину 16 бит и будет отображать нули / нули через каждый второй байт для данных английской / латинской кодировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...