我有一个长字符串,我想编码为ascii。我在做:
s = s.encode('ascii', 'replace')
但我明白了:
'ascii' codec can't decode byte 0xc3 in position 2646: ordinal not in range(128)
(我也试过'ignore'
,但没有帮助。)
我做错了什么?
答案 0 :(得分:14)
您的字符串已经编码并带有一些编码。在将其编码为ascii之前,必须先解码。
Python 隐含 尝试对其进行解码(这就是为什么你得到UnicodeDecodeError
而不是UnicodeEncodeError
)。
您可以通过明确解码您的bytestring (使用适当的编码) 尝试将其重新编码为ascii来解决问题。
示例:
s = s.decode('some_encoding').encode('ascii', 'replace')
首先使用您的字符串编码的正确编码,而不是'some_encoding'
。
在解码字符串之前,您必须知道字符串正在使用哪种编码。你从哪里得到了字符串?
答案 1 :(得分:1)
encode
个对象上使用 unicode
将其转换为str
。
如果您有str对象,则应使用decode
将其转换为unicode
。