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

1 python unicode encoding utf-8

在python中使用相同的编码格式多次编码字符串有什么危害吗?(即UTF-8)?

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

这可能在将来发生变化,有人可能决定在另一个序列化(或类似)函数中使用它,而不首先将其结果编码为UTF-8.我想知道总是从它返回一个UTF-8编码的字符串是否安全(此字符串也将通过序列化函数重新执行.encode()).我的测试表明这不是问题,但是,我想我会问.

谢谢!

Len*_*bro 5

你不能多次编码,它不起作用.

>>> 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)
Run Code Online (Sandbox Code Playgroud)

看,你得到"ascii编解码器无法解码".字符串上的编码方法的作用是首先将字符串解码为Unicode,然后使用给定的编码再次对其进行编码.它将使用系统编码对其进行解码,默认情况下为ascii.

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

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