我使用的是web2py框架,只有当我尝试在web2py的INPUT html助手INPUT(_name='NOME_SERVIDOR', _type='text', _value=self.servidor['NOME_SERVIDOR'], _readonly='true')
中使用self.servidor['NOME_SERVIDOR']
的字符串值时,我才会得到错误<type 'exceptions.UnicodeEncodeError'> 'ascii' codec can't encode character u'xc3' in position 12: ordinal not in range(128)
。
是的,我在文件顶部使用# -*- coding: utf-8 -*-
。
# coding=utf-8
from gluon.html import *
def exampleControllerFunction():
class FormAvaliacao(object):
def __init__(self):
self.servidor = current.session.dadosServidor
self.tipo = current.session.avaliacaoTipo
@property
def exampleError(self):
return FORM(
INPUT(_name='NOME_SERVIDOR', _type='text', _value=self.servidor['NOME_SERVIDOR'], _readonly='true')
)
@property
def exampleOk(self):
return self.servidor['NOME_SERVIDOR']
form1 = FormAvaliacao().exampleError
form2 = FormAvaliacao().exampleOk
return dict(form=form1)
例如,上面的代码表示同一个unicode字符串表现不同的两种情况。
ps.:我在代码的许多其他部分使用了相同的字符串,这只是INPUT内部的一个问题。
http://web2py.com/examples/static/epydoc/web2py.gluon.html-pysrc.html#
当您初始化Input类时,它会调用self_postprocessing(),然后调用str(self['_value'])。这很可能是错误发生的地方。
1766 if self['_value'] is None or isinstance(self['_value'],cgi.FieldStorage):
1767 _value = None
1768 else:
1769 _value = str(self['_value'])