[Zope3-Users] Unicode and vocabularies

Darryl Cousins darryl at darrylcousins.net.nz
Fri Sep 29 21:52:35 EDT 2006


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

    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():
    util.medium = options

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
        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

Best regards,

More information about the Zope3-users mailing list