【问题标题】:Flask-Admin: UnicodeDecodeError: 'ascii' codec can't decode byteFlask-Admin:UnicodeDecodeError:“ascii”编解码器无法解码字节
【发布时间】:2013-08-19 16:53:15
【问题描述】:

我正在尝试使用 flask-admin 为我的应用程序构建一个后端接口。 当我尝试访问表单以创建新条目时,我得到:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13: ordinal not in range(128)

通过堆栈跟踪,问题是我的表中的某些项目包含非 ascii 字符。我该如何解决这个问题? 谢谢!

【问题讨论】:

    标签: python unicode encoding flask flask-admin


    【解决方案1】:

    一些遗留代码也遇到了同样的问题。每当您:

    1. 使用 Python 2,并且
    2. 通过str(而不是unicode)对象表示非ASCII数据,并且
    3. 您的 Python 系统编码是 ascii(大多数情况下都是这样)。

    第二个问题可能源于 SQLAlchemy String 列在你应该有 Unicode 的地方,或者是在你应该写 'u'šömething'' 的时候写 'šömething' - 它通常可能很难确定问题的实际根源。

    然而,很容易通过方程的hacking the third component 来解决它(不过通常是not recommended)。在代码中的某处添加这些行应该可以解决问题(通过将实际问题隐藏在地毯下):

    import sys
    reload(sys)
    sys.setdefaultencoding('UTF8')
    

    【讨论】:

      【解决方案2】:

      你应该使用unicode字符串,就像这样

      u"whaterver string"
      

      【讨论】:

        【解决方案3】:

        一般来说,这个错误是通过使用unicode.encode()方法强制字符串数组为unicode来解决的。

        来自主题的Python Wiki页面

        >>> u"a".encode("utf-8")
        'a'
        >>> u"\u0411".encode("utf-8")
        '\xd0\x91'
        >>> "a".encode("utf-8")         # Unexpected argument type.
        'a'
        >>> "\xd0\x91".encode("utf-8")  # Unexpected argument type.
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in     range(128)
        

        我想最好的解决方法是修改负责字段格式的 jinja 宏以强制将值转换为 unicode。

        【讨论】:

        • 感谢您的回复...但我很迷茫。我该怎么做?
        猜你喜欢
        • 1970-01-01
        • 2013-08-17
        • 2011-06-29
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 2014-04-09
        • 2018-08-02
        相关资源
        最近更新 更多