ASPFAQs.com
Your source for ASP-related frequently asked questions and answers!


4GuysFromRolla.com : ASP FAQS : Strings

Question: How can I convert binary data into a string?

Answer: Sometimes you will run across a situation where you need to convert binary data that represents text back into text. An example of this is getting the results of an HTTP operation from an XMLHttp request in binary form, because you are retrieving non-English unicode text from the site you're querying. Check out this article for more details on getting binary data from XMLHttp.

Whatever the reason, native ASP has a lot of trouble with actually converting binary to text, but ADO can handle the job. The following function uses a disconnected recordset object to convert binary data to text. First we declare the function, setup some constants and create a new recordset (the parameters will be explained in a moment).

<%
Function BinToText(varBinData, intDataSizeInBytes)    ' as String
    Const adFldLong = &H00000080
    Const adVarChar = 200
    Set objRS = Server.CreateObject("ADODB.Recordset")

Next, we add a field to this recordset of type adVarChar (character field), with our own name of "txt" and including the intDataSizeInBytes parameter we took - this is the number of bytes contained in the binary data that will be converted into text. The last parameter is a setting that allows us to use the AppendChunk method (explained below). Then we open the recordset.

        objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
        objRS.Open

Now we need to add a record, append the data in binary form and return it in string form.

        objRS.AddNew
        objRS.Fields("txt").AppendChunk varBinData
        BinToText = objRS("txt").Value

AppendChunk takes the binary data and places it into the field called "txt" in our recordset. Because our recordset is a VarChar type, ADO silently converts our data to it's text equivalent when we access the field to return the data on the next line.

Here is the whole function, (along with the cleanup of the objRS variable):

<%
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '        Function to convert binary data to text
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Function BinToText(varBinData, intDataSizeInBytes)    ' as String
        Const adFldLong = &H00000080
        Const adVarChar = 200
        Set objRS = Server.CreateObject("ADODB.Recordset")

        objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
        objRS.Open

        objRS.AddNew
        objRS.Fields("txt").AppendChunk varBinData
        BinToText = objRS("txt").Value

        objRS.Close
        Set objRS = Nothing
End Function
%>


Here is an example of it's use:

<%
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '        Function to return binary data
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Function GetHTMLBin(strURL)
        Dim objXMLHTTP, strReturn
        Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")

        objXMLHTTP.Open "GET", strURL, False
        objXMLHTTP.Send Cstr(Rnd())

        GetHTMLBin = objXMLHTTP.responseBody
        Set objXMLHTTP = Nothing
    End Function


    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '        Function to convert binary data to text
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Function BinToText(varBinData, intDataSizeInBytes)    ' as String
        Const adFldLong = &H00000080
        Const adVarChar = 200
        Set objRS = Server.CreateObject("ADODB.Recordset")

        objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
        objRS.Open

        objRS.AddNew
        objRS.Fields("txt").AppendChunk varBinData
        BinToText = objRS("txt").Value

        objRS.Close
        Set objRS = Nothing
    End Function

    Response.Write BinToText(GetHTMLBin("http://www.4guysfromrolla.com/"), 35000)
%>


FAQ posted by Richard Lowe at 2/11/2001 2:00:05 PM to the Strings category. This FAQ has been viewed 76,971 times.


Copyright 2019 QuinStreet Inc. All Rights Reserved.
Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers