将字符串编码为ASCII

15 投票
2 回答
54450 浏览
提问于 2025-04-15 16:10

我有一个很长的字符串,我想把它转换成 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'

在解码之前,你必须知道这个字符串使用了哪种编码。你是从哪里得到这个字符串的呢?

撰写回答