Hi,

I'm having some trouble with unicode and vocabularies.

I've a utility with a List field:

class MyUtility(Interface):

        mylist = List(title=_("My List"),
                      value_type = TextLine(_("list item")),
                      default = [],
                      required = False)

When the utility is created the list is populated from a unicode text
file:

    datadir = os.path.join(os.path.dirname(__file__),'data')
    source_file = os.path.join(datadir, 'medium.dat')
    fp = codecs.open(source_file,"r",'utf-8')
    options = []
    for line in fp.readlines():
        options.append(line.strip())
    util.medium = options
    fp.close()

The file contains é (e-acute). I came to the above routine to fix a
'Wrong Type' error for the list.

Now when I come to create a vocabulary from the list:

class MyVocabulary(object):

    def __call__(self, context):
        utility = zapi.getUtility(IMyUtility)
        items = [item for item in utility.medium]
        return SimpleVocabulary.fromValues(items)

It raises error

...
File "/opt/zope/zope3/src/zope/schema/vocabulary.py", line 41, in
__init__
        self.token = str(token)
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in
position 13: ordinal not in range(128)with vocabulary code:

I can't figure out how to get the correct unicode value into the utility
list and yet still have str(u'é') work when vocabulary factory is
called.

Best regards,
Darryl

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to