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

Shonn Gilson shonn at shonn.com
Wed Mar 7 05:23:54 EST 2001


Perfect. It works for both Response.BinaryWrite and doing an AppendChunk
with ADO. I noticed that it was coming in as a buffer from ADO but
everything that I saw relating to buffers was that they were an undocumented
necessary evil.
Thank you, that ends a lot of frustration.

Shonn

"Alex Martelli" <aleaxit at yahoo.com> wrote in message
news:984ql60tdk at news1.newsguy.com...
> "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