Reputation: 14840
I have a long string that I want to encode to ascii. I'm doing:
s = s.encode('ascii', 'replace')
but I get:
'ascii' codec can't decode byte 0xc3 in position 2646: ordinal not in range(128)
(I've also tried 'ignore'
but it doesn't help.)
What am I doing wrong?
Upvotes: 15
Views: 58809
Reputation: 75
encode
should be used on unicode
objects to convert it to a str
.
If you have a str object, you should use decode
to convert it to a unicode
.
Upvotes: 2
Reputation: 223152
Your string is already encoded with some encoding. Before encoding it to ascii, you must decode it first.
Python is implicity trying to decode it (That's why you get a UnicodeDecodeError
not UnicodeEncodeError
).
You can solve the problem by explicity decoding your bytestring (using the appropriate encoding) before trying to reencode it to ascii.
Example:
s = s.decode('some_encoding').encode('ascii', 'replace')
Use the correct encoding your string was encoded in first place, instead of 'some_encoding'
.
You have to know which encoding a string is using before you can decode it. Where did you get the string from?
Upvotes: 22