将字符串编码为ASCII
我有一个很长的字符串,我想把它转换成 ASCII 码。我正在这样做:
s = s.encode('ascii', 'replace')
但是我得到了:
'ascii' codec can't decode byte 0xc3 in position 2646: ordinal not in range(128)
(我也试过 'ignore'
,但没有用。)
我哪里做错了呢?
2 个回答
2
encode
应该用在 unicode
对象上,这样可以把它转换成 str
类型。如果你有一个 str
对象,那么你应该使用 decode
来把它转换成 unicode
。
22
你的字符串已经用某种编码方式进行了编码。在把它转成ascii之前,你必须先解码它。
Python实际上正在尝试自动解码这个字符串(这就是你收到UnicodeDecodeError
而不是UnicodeEncodeError
的原因)。
你可以通过明确地解码你的字节字符串(使用合适的编码方式)来解决这个问题,然后再尝试把它重新编码成ascii。
举个例子:
s = s.decode('some_encoding').encode('ascii', 'replace')
首先要使用你字符串最初编码时所用的正确编码,而不是'some_encoding'
。
在解码之前,你必须知道这个字符串使用了哪种编码。你是从哪里得到这个字符串的呢?