我正在尝试使用 flask-admin 为我的应用程序构建一个后端接口。当我尝试访问表单以创建新条目时,我得到:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13: ordinal not in range(128)
通过堆栈跟踪,问题是我的表中的某些项目包含非 ascii 字符。我该如何解决这个问题?谢谢!
我正在尝试使用 flask-admin 为我的应用程序构建一个后端接口。当我尝试访问表单以创建新条目时,我得到:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13: ordinal not in range(128)
通过堆栈跟踪,问题是我的表中的某些项目包含非 ascii 字符。我该如何解决这个问题?谢谢!
您应该使用 unicode 字符串,就像这样
u"whaterver string"
一些遗留代码也有同样的问题。每当您执行以下操作时,都会出现此问题:
str
通过(而不是unicode
)对象表示非 ASCII 数据,并且ascii
(大多数情况下)。第二个问题可能源于String
您应该拥有的 SQLAlchemy 列Unicode
,或者源于'šömething'
您在本应编写 'u'šömething'' 时编写的内容 - 查明问题的实际根源通常非常棘手。
然而,通过破解方程的第三部分很容易解决它(虽然一般不推荐)。在代码中的某处添加这些行应该可以解决问题(通过将实际问题隐藏在地毯下):
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
一般来说,这个错误是通过使用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 来解决。