UnicodeDecodeError:'ascii'编解码器无法解码位置47的字节0x92:序数不在范围内(128)

UnicodeDecodeError:'ascii'编解码器无法解码位置47的字节0x92:序数不在范围内(128),第1张

UnicodeDecodeError:'ascii'编解码器无法解码位置47的字节0x92:序数不在范围内(128)

问题是您正在调用

enpre
一个
str
对象。

A

str
是一个字节字符串,通常表示以类似UTF-8的方式编码的文本。当您调用
enpre
它时,首先必须将其解码回文本,以便可以对文本进行重新编码。默认情况下,Python通过调用进行 *** 作
s.depre(sys.getgetdefaultencoding())
getdefaultencoding()
通常返回
'ascii'

因此,您正在说的是UTF-8编码文本,就好像是ASCII一样对其进行解码,然后在UTF-8中对其进行重新编码。

一般的解决方案是

depre
使用正确的编码显式调用,而不是让Python使用默认值,然后
enpre
使用结果。

但是,当正确的编码已经是您想要的编码时,更简单的解决方案是跳过,

.depre('utf-8').enpre('utf-8')
而将UTF-8
str
用作
str
已经存在的UTF-8

或者,如果你的MySQL包装有一个功能,让你指定的编码,并取回

unipre
CHAR
/
VARCHAR
/
TEXT
列,而不是
str
值(例如,在MySQLdb的,你传递
use_unipre=True
connect
呼叫,或者
charset='UTF-8'
如果你的数据库是太旧,自动-
检测到),只需执行此 *** 作即可。然后,您将拥有
unipre
对象,然后可以调用
.enpre('utf-8')
它们。

通常,处理Unipre问题的最好方法是最后一个-
尽早解码所有内容,以Unipre进行所有处理,然后再进行尽可能晚的编码。但是无论哪种方式,您都必须保持一致。不要呼吁

str
可能是
unipre
;
不要将
str
文字连接到a
unipre
或将其传递给其
replace
方法;等等。无论何时您进行混搭,Python都将使用默认编码为您隐式转换,这几乎是您想要的。

附带说明,这是Python 3.x的Unipre更改可帮助的众多功能之一。首先,

str
现在是Unipre文本,而不是编码的字节。更重要的是,如果您
已对 字节 进行了
编码(例如,在
bytes
对象中),则调用
enpre
将为您提供一个
AttributeError
替代,而不是尝试进行静默解码,以便它可以重新编码。而且,类似地,尝试混合并匹配Unipre和字节将为您提供一个明显的
TypeError
,而不是在某些情况下成功进行的隐式转换,并给出有关您在其他情况下不要求的编码或解码的隐秘信息。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5668343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存