Flask-Admin: UnicodeDecodeError: 'ascii'编解码器无法解码字节

4
我正在尝试使用Flask-Admin为我的应用程序构建后端界面。 当我尝试访问表单以创建新条目时,出现以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13: ordinal not in range(128)

浏览堆栈跟踪,问题在于我的表中有一些包含非ASCII字符的项目。我该如何解决这个问题呢? 谢谢!

3个回答

1

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

u"whaterver string"

1

我曾经遇到过同样的问题,这个问题会在以下情况下发生:

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

第二个问题可能源于在 SQLAlchemy 中使用了 String 列,而实际上应该使用 Unicode,或者在代码中写入了 'šömething' 而实际上应该写成 `u'šömething'' - 定位实际问题通常会很棘手。

然而,通过 修改方程式的第三个组件 可以轻松解决它(尽管一般情况下 不建议这样做)。在代码的某个地方添加这些行就可以解决问题(通过将实际问题藏在地毯下):

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

0
一般来说,可以通过使用 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。


1
谢谢您的回复...但我很迷惑。我该怎么做? - Francesco Della Vedova

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接