将包含unicode的字符串传递给RESTful API

时间:2013-06-28 21:38:21

标签: python api rest unicode

我正在针对RESTful API(我正在使用python / urllib2 / pandas)发出3个单独的查询,每个查询包含以下字符串变体之一:

(1) 'Caveolin-1 suppresses Human Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB'

(2) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF-κB'

(3) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF

结果是:

(1)不返回任何结果(以编程方式从python完成)

(2)工作并返回预期结果 - 匹配记录(使用Chrome插件手动触发查询以进行RESTful API调用,并将字符串原样粘贴到API调用的相应部分中)

(3)与(2)

的作用相同

由于我有源数据并且通过从数据帧中读取字符串从python以编程方式执行(1),是否有任何方法使用源数据中的unicode字符做某事(不知道是什么)(我猜这是什么'\ xbaB'等)使它们可以通过API? '\ xce \ xbaB'似乎是基于上述的'κB'的编码。

或者这就是我要查看API文档的内容(对于这一点我不认为......)。

如果这很难/更容易 - 什么是在传递查询之前从字符串中删除任何unicode字符的最佳方法(即回退到(3))?

提前致谢!

REF:来自python我正在执行以下API API

api_call = 'http://some_api/index:ABCDE?query=title(' + str(title_string) + ')'
headers = {'APIKey': API_key, 'accept':'text/xml, application/atom+xml'}
request = urllib2.Request(api_call, headers = headers, )
response = urllib2.urlopen(request,'' , 30)

return response.read()

2 个答案:

答案 0 :(得分:2)

\ xce和\ xba分别是十六进制值ce和ba的字符。如果你不了解更多关于如何与API交谈或者期望什么,我会认为你可以做这样的事情来使字符串可以通过:

>>> urllib.quote('an Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB')
'an%20Immunodeficiency%20Virus-1%20replication%20by%20inhibiting%20acetylation%20of%20NF-%CE%BAB'

编辑:

通常在python中,这是我如何向URL添加参数:

params = {'query' : 'title(' + title_string + ')'}
api_call = 'http://some_api/index:ABCDE?' + urllib.urlencode(params)

所以我倾向于那个而不是我之前的urllib.quote建议(如果title_string是路径的一部分,我认为这是适用的),但我不确定它是否足以使用title_string中的十六进制值。我认为这将取决于它在服务器端的处理方式。

答案 1 :(得分:0)

尝试将“\”转换为“\\”,因为'\ x'表示预定为十六进制数的十六进制字符代码

相关问题