Akhil Mathew
Akhil Mathew

Reputation: 1659

python request library giving wrong value single quotes

Facing some issue in calling API using request library. Problem is described as follows

The code:.

r = requests.post(url, data=json.dumps(json_data), headers=headers)

When I perform r.text the apostrophe in the string is giving me as like this Bachelor\u2019s Degree. This should actually give me the response as Bachelor's Degree.

I tried json.loads also but the single quote problem remains the same, How to get the string value correctly.

Upvotes: 0

Views: 1958

Answers (3)

LucyDrops
LucyDrops

Reputation: 609

From requests docs:

When you make a request, Requests makes educated guesses about the encoding of the response based on the HTTP headers. The text encoding guessed by Requests is used when you access r.text

On the response object, you may use .content instead of .text to get the response in UTF-8

Upvotes: 1

bruno desthuilliers
bruno desthuilliers

Reputation: 77902

What you see here ("Bachelor\u2019s Degree") is the string's inner representation, where "\u2019" is the unicode codepoint for "RIGHT SINGLE QUOTATION MARK". This is perfectly correct, there's nothing wrong here, if you print() this string you'll get what you expect:

>>> s = 'Bachelor\u2019s Degree'
>>> print(s)
Bachelor’s Degree

Learning about unicode and encodings might save you quite some time FWIW.

EDIT:

When I save in db and then on displaying on HTML it will cause issue right?

Have you tried ?

Your database connector is supposed to encode it to the proper encoding (according to your fields, tables and client encoding settings).

wrt/ "displaying it on HTML", it mostly depends on whether you're using Python 2.7.x or Python 3.x AND on how you build your HTML, but if you're using some decent framework with a decent template engine (if not you should reconsider your stack) chances are it will work out of the box.

As I already mentionned, learning about unicode and encodings will save you a lot of time.

Upvotes: 3

DeepSpace
DeepSpace

Reputation: 81594

It's just using a UTF-8 encoding, it is not "wrong".

string = 'Bachelor\u2019s Degree'
print(string)
Bachelor’s Degree

You can decode and encode it again, but I can't see any reason why you would want to do that (this might not work in Python 2):

string = 'Bachelor\u2019s Degree'.encode().decode('utf-8')
print(string)
Bachelor’s Degree

Upvotes: 1

Related Questions