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
[email protected]
http://mail.zope.org/mailman/listinfo/zope3-users