Ok, so I am lost. The debugger is not too much help at this point. I assume this setup should work so we can go from there.


# -*- coding: utf-8 -*-

import os, sys, glob MySQLdb
from sqlobject import *

sqlhub.processConnection = connectionForURI('mysql://test:test@localhost/test?charset=utf8&use_unicode=1

class Temp(SQLObject):
    class sqlmeta:
        table = "temp"
        fromDatabase = True

    def add(label):
        return Temp(label=label)

    add = staticmethod(add)

a = 'Chèrie'

t = Temp.add(a)

print 'Done'

This fails, can you give me any advise on where to look or how to debug?



On Jan 7, 2008 11:59 AM, Oleg Broytmann < phd@phd.pp.ru> wrote:
On Mon, Jan 07, 2008 at 11:43:24AM -0500, Glenn MacGregor wrote:
> It looks like somewhere in SQLObject we are calling decode on the variable
> which contains Ch?rie to decode it to ascii. Is this the intended result?

  No, "decoding" in Python means converting from str to unicode. Somewhere
(in UnicodeStringValidator in col.py) the string is decoded from str using
utf-8 charset, but the decoding fails.

> I have tried to manually define the column in the class definition,
> label = UnicodeCol()
> This did not change anything

  Of course. Setting "use_unicode" in DB URI changes every StringCol to
  You can declare it StringCol explicitly, and then use only str, not

> I have tracked it down to the return statement of the StringLikeConverter,
> line 96 on converters.py. return "'%s'" % value seems to be doing a decode
> (or encode) which is failing.

  I doubt it. At the time the converter works unicode should be converted
to str already.

> Note in the debugger I see the type of the
> param value in that function is str, I would think it would be unicode.

  UnicodeStringValidator.from_python() has converted it to str.

    Oleg Broytmann            http://phd.pp.ru/            phd@phd.pp.ru
          Programmers don't die, they just GOSUB without RETURN.