4

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

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

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

4

3 回答 3

1

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

u"whaterver string"
于 2015-06-26T23:21:29.513 回答
1

一些遗留代码也有同样的问题。每当您执行以下操作时,都会出现此问题:

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

第二个问题可能源于String您应该拥有的 SQLAlchemy 列Unicode,或者源于'šömething'您在本应编写 'u'šömething'' 时编写的内容 - 查明问题的实际根源通常非常棘手。

然而,通过破解方程的第三部分很容易解决它(虽然一般不推荐)。在代码中的某处添加这些行应该可以解决问题(通过将实际问题隐藏在地毯下):

import sys
reload(sys)
sys.setdefaultencoding('UTF8')
于 2018-12-06T10:24:53.187 回答
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 来解决。

于 2013-08-20T04:43:50.813 回答