Skip to main content
 首页 » 编程设计

python之多次编码(使用相同的编码格式)字符串是否有任何危害 (在 Python 中)

2025年05月04日26oomusou

在 python 中使用相同的编码格式对一个字符串进行多次编码有什么坏处吗? (即 UTF-8)?

我有一个函数,它使用另一个函数从文档中获取字符串,然后序列化该字符串。目前,第二个函数(从文档中获取字符串的函数)的唯一用户是第一个函数。

这在未来可能会改变,有人可能会决定在另一个序列化(或类似)函数中使用它,而不是先将其结果编码为 UTF-8。我想知道始终从中返回 UTF-8 编码的字符串是否安全(此时,该字符串也将由序列化函数重新编码())。我的测试表明这不是问题,但我想我会问。

谢谢!

请您参考如下方法:

你不能多次编码,这是行不通的。

>>> s = u"ä".encode('latin1') 
>>> s = s.encode('latin1') 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) 

看,您得到“ascii 编解码器无法解码”。字符串上的 encode 方法所做的是首先将字符串解码 为 Unicode,然后使用给定的编码再次对其进行编码。它将使用系统编码对其进行解码,默认情况下为 ascii。

这种行为是出乎意料的,并且在 Python 3 中消失了,顺便说一句,其中字节没有编码方法,字符串没有解码方法。

所以您根本无法对其进行多次编码,当然这是因为对编码字符串进行编码根本没有任何意义。编码是从 Unicode 转换为二进制表示,您不能进一步编码二进制表示。