saluti, sto tentando di inserire un valore bytea in una tabella di un db postgres 8.4.7 usando psycopg2 2.2.1-1 (Python 2.6.6) e ottengo un errore. Se qualcuno ha lumi mi puo' suggerire il suo parere?
Descrivo il problema: # carico un'immagine >>> mypic=open('/home/sdp/testpic.png','r').read() # provo a inserirla con psycopg2 >>> q.curs.execute("insert into blobs (name,file) values (%s,%s)",('UN nome a caso',mypic,)) Traceback (most recent call last): File "<stdin>", line 1, in <module> psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xff HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". I miei tentativi di convertire a utf8 falliscono miseramente. Per esempio: >>> s=unicode(mypic,'UTF-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte Provo ancora: >>> s=unicode(mypic,'LATIN9') >>> su8=s.encode('UTF-8') Wow! Questo non da errore! >>> len(mypic) , len(su8) (13401, 19961) lunghezze diverse, per via della diversa codifica... ok, ci puo' stare; E allora proviamo a inserire adesso: >>> q.curs.execute("insert into blobs (name,file) values (%s,%s)",('UN nome a caso',su8)) >>> q.conn.commit() Ok, no errori... Proviamo a leggere il dato allora: >>> q.curs.execute("select file from blobs") >>> T2=q.curs.fetchone() >>> T2 (<read-only buffer for 0xb739ad80, size 16, offset 0 at 0xb6ad04e0>,) >>> dir(T2[0]) ['__add__', '__class__', '__cmp__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__', '__len__', '__mul__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__'] quel size 16 mi inquieta, vediamo da postgres cosa dice: => select name,file from blobs; name | file ----------------+------------------------------------------------------------------ UN nome a caso | \303\203\302\277\303\203\302\230\303\203\302\277\303\203\302\240 (1 riga) Io per ora mi arrendo; se avete idee... Grazie in anticipo Stefano
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python