Python, ASP, ADO, and Image string/binary problems

Alex Martelli aleaxit at yahoo.com
Wed Mar 7 09:14:23 CET 2001


"Shonn Gilson" <shonn at shonn.com> wrote in message
news:tabjei1p4a9481 at corp.supernews.com...
    [snip]
> that '\377' is octal not decimal.). The problem seems to be that when
Python
> passes strings through COM that they get translated to Unicode. This
happens

Yes, this IS what COM (actually, Automation) specifies -- *all* strings
are Unicode (note that Java specifies exactly the same thing, but COM
was there first:-).

Bravo for diagnosing that this was the problem in your case, though!


> for things like Response.BinaryWrite along with things like recordsets
> (objRS = Server.CreateObject("ADODB.Recordset")).  The result is that the
> beginning of my jpg file looks like
> '\377\000\330\000\377\000\340\000\000\000\020\000J\000F\000I\000F' instead
> of '\377\330\377\340\000\020JFIF'.
>
> Does anyone know how to handle this?

If you don't want to use *STRINGS* (normally-readable sequences of
characters), then don't.  Python offers other datatypes, which will
help you map (for example) *sequences of BYTES* (a byte is not the
same thing as a character -- even though decades of programming with
single-byte-characters strings have obscured this for many:).


Specifically, I think that what you want is the built-in *BUFFER*
type, which Python/COM will map into (in low-level COM terms) a
SAFEARRAY of VT_UI8 (a sequence-of-bytes, uninterpreted).


Try just changing this line:

> > Response.BinaryWrite(bstrOut.getvalue())

to:

> > Response.BinaryWrite(buffer(bstrOut.getvalue()))

and see if that solves it...


Alex






More information about the Python-list mailing list