我有一个很长的字符串,我想将其编码为ascii码。我正在执行以下操作:
s = s.encode('ascii', 'replace')
但是我得到了:
'ascii' codec can't decode byte 0xc3 in position 2646: ordinal not in range(128)
我也尝试过使用'ignore',但并没有帮助。
我做错了什么?
你的字符串已经使用某种编码进行了编码。在将其编码为ascii之前,你必须首先对其解码。
Python正试图隐式地对其进行解码(这就是为什么会出现UnicodeDecodeError
而不是UnicodeEncodeError
)。
你可以通过显式解码你的字节字符串(使用适当的编码)在尝试重新编码为ascii之前来解决这个问题。
例如:
s = s.decode('some_encoding').encode('ascii', 'replace')
首先要使用正确的编码方式来解码你最初编码过的字符串,而不是使用'some_encoding'
。
在对字符串进行解码之前,你必须知道它使用的是哪种编码方式。你从哪里获取这个字符串的呢?
encode
应该用于unicode
对象,将其转换为str
。
如果您有一个str
对象,则应使用decode
将其转换为unicode
。