问题是您正在调用
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,而不是在某些情况下成功进行的隐式转换,并给出有关您在其他情况下不要求的编码或解码的隐秘信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)