使用请求库调用API时遇到一些问题。问题描述如下
代码:。
r = requests.post(url, data=json.dumps(json_data), headers=headers)
当我执行r.text时,字符串中的撇号给了我
像这样Bachelor\u2019s Degree
。这实际上应该给我作为学士学位的答案。
我也尝试了json.loads,但单引号问题仍然存在, 如何正确获取字符串值。
答案 0 :(得分:3)
您在此处看到的内容("Bachelor\u2019s Degree"
)是字符串的内部表示,其中"\u2019"
是“正确单引号”的unicode codepoint。这是完全正确的,这里没有错,如果你print()
这个字符串你会得到你所期望的:
>>> s = 'Bachelor\u2019s Degree'
>>> print(s)
Bachelor’s Degree
Learning about unicode and encodings可能会为你节省很多时间FWIW。
编辑:
当我保存在db中然后在HTML上显示时,它将导致问题 正确?
你试过吗?
您的数据库连接器应该将其编码为正确的编码(根据您的字段,表和客户端编码设置)。
wrt /“在HTML上显示它”,它主要取决于你是使用Python 2.7.x还是Python 3.x以及如何构建HTML,但如果你使用的是一些体面的框架模板引擎(如果不是你应该重新考虑你的堆栈)它可能会开箱即用。
正如我已经提到的,了解unicode和编码将为您节省很多时间。
答案 1 :(得分:1)
它只是使用UTF-8编码,它并非“错误”。
string = 'Bachelor\u2019s Degree'
print(string)
Bachelor’s Degree
您可以再次decode
和encode
,但我看不出您为什么要这样做的原因(这可能在Python 2中不起作用):
string = 'Bachelor\u2019s Degree'.encode().decode('utf-8')
print(string)
Bachelor’s Degree
答案 2 :(得分:0)
来自请求文档:
发出请求时,请求会针对 基于HTTP标头的响应编码。文字编码 访问r.text时,将使用Requests猜测的值
在响应对象上,您可以使用.content
而不是.text
来获取UTF-8中的响应