2014-10-28 119 views
-2

我正在使用web2py框架,并且只有当我尝试时才会收到错误<type 'exceptions.UnicodeEncodeError'> 'ascii' codec can't encode character u'\xc3' in position 12: ordinal not in range(128)在web2py的INPUT html helper:INPUT(_name='NOME_SERVIDOR', _type='text', _value=self.servidor['NOME_SERVIDOR'], _readonly='true')中使用字符串值self.servidor['NOME_SERVIDOR']exceptions.UnicodeEncodeError:'ascii'编解码器无法在位置12编码字符u' xc3':序号不在范围内(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中成为问题。

+1

您从文章中省略了两个重要元素。首先,你的帖子中没有问题。 StackOverflow是一个问答网站,但如果没有问题,很难形成有用的答案。其次,你还没有向我们展示你的代码在哪里失败。请提供尽可能短的**完整**程序来证明您的问题。 – 2014-10-28 20:11:20

+0

“编码”注释行只影响代码中的字符串文字,它不影响字符串在程序中的处理方式。这不是某种魔力子弹。 – 2014-10-28 20:32:21

+0

感谢您的有用评论,@Robᵩ。我编辑了我的问题。 – 2014-10-28 20:37:34

回答

2

http://web2py.com/examples/static/epydoc/web2py.gluon.html-pysrc.html#

当你initalize Input类,它调用self._postprocessing(),这反过来又调用STR(自[ '_值'])。这可能是错误发生的地方。

1766   if self['_value'] is None or isinstance(self['_value'],cgi.FieldStorage): 
1767    _value = None 
1768   else: 
1769    _value = str(self['_value']) 
+0

使用'''_value = self.servidor ['NOME_SERVIDOR']。encode('uff-8')'''解决了问题 – 2014-10-29 16:58:17

相关问题