UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
Currently I am working on this code:
customer_telno = customer.find('div', 'customer_phone_number')
customer_telno = '' if customer_telno is None else customer_telno.contents[0]
p.customer_info = str(customer_phone + ' ' + customer_telno).strip()
When the above snippet is run I get UnicodeEncodeError :
Traceback (most recent call last):
File "foobar.py", line 792, inp.customer_info = str(customer_phone + ' ' + customer_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'xa0' in position 20: ordinal not in range(128)
I have tried using everything possible but couldn’t find anything which works consistently.
Can anyone solve this problem?
In case you are facing ordinal not in range 128 error it is because you are converting unicode to encoded bytes using str, so to solve the problem you require to stop str and instead use .encode() to properly encode the strings.
Syntax-
str.encode(encoding="utf-8",errors="strict")
Also, it returns an encoded version of a string as a bytes object.
Here, an error is set to specify a various error handling scheme and by default, the error is set to “strict” which means that the encoding error raises a UnicodeError, the default encoding is set to “utf-8”.
Using .encode() in your code:
p.customer_info = u' '.join((customer_phone, customer_telno)).encode('utf-8').strip()