在python中使用相同的编码格式对一个字符串进行多次编码有什么危害吗?(即UTF-8)?在
我有一个函数,它使用另一个函数从文档中获取字符串,然后序列化该字符串。目前,第二个函数(从文档中获取字符串的用户)的唯一用户是第一个函数。在
这在将来可能会改变,而且有人可能决定在另一个序列化(或类似)函数中使用它,而不首先将其结果编码为UTF-8。我想知道始终从中返回一个UTF-8编码的字符串是否安全(这个字符串目前也将被序列化函数re-.encode()'d)。我的测试表明这不是问题,但是,我想我应该问问。在
谢谢你!在
Tags:
除非字符串是纯ascii,否则是的,它可能会造成伤害(如果是纯ascii,则不需要担心utf-8):
最好将字节序列和文本视为两种不同的东西。在python3中,它们是不同的:bytes对象有
decode()
方法,string(unicode)对象有encode()
方法。在你不能多次编码,它不起作用。在
看,你会得到“ascii编解码器不能解码”。字符串上的encode方法的作用是首先将字符串解码为Unicode,然后用给定的编码对其进行再次编码。它将用系统编码解码,默认情况下是ascii。在
这种行为是意外的,在python3中消失了,bytes没有encode方法,string没有decode方法。在
所以你不能对它进行多次编码,当然这是因为编码一个编码字符串没有任何意义。编码是从Unicode转换为二进制表示,您不能进一步编码二进制表示。在
通常,您应该只对
unicode
对象调用encode
,而只对string
对象调用decode
。在encode
将Unicode对象编码为给定的编码(存储为字符串)。decode
将给定的编码解码回Unicode对象。在2.x中的}的存在应该被视为一个历史文物。在
string.encode
和{相关问题 更多 >
编程相关推荐