【问题标题】:How manage a API (DeepL) which send data in UTF-8 format?如何管理以 UTF-8 格式发送数据的 API (DeepL)?
【发布时间】:2020-12-03 21:54:32
【问题描述】:

我使用 DeepL API:https://www.deepl.com/docs-api/translating-text/

我使用 pythonrequest 库与它进行交互。

import requests
import ast
r =  requests.post(url='https://api.deepl.com/v2/translate',
                   data = {
                        'target_lang' : 'FR',  
                        'auth_key' : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
                        'text': ''Honey Was ist denn los hier?''})
print(ast.literal_eval(r.text)['translations'][0]['text'])

输出:

'Chérie, que se passe-t-il ici ?'

如你所见,我得到的是“Chérie”而不是“Chérie”

这很正常,因为 DeepL API : "仅支持 UTF8 编码的纯文本。"

但我不知道要获得正确的文本(此处为“Chérie”),我在输入中尝试了一些工具,例如“.encode('utf-8')”,但它不起作用。

你有想法吗?提前谢谢你:)

【问题讨论】:

  • 您的终端可能认为输出是 Latin-1(或 CP1252),而实际上是 UTF-8。您可以使用print('Ch\u00E9rie') 进行测试。
  • 但这也可能是因为您使用了一种有趣的方法来编码/解码 JSON。为什么不requests.post(..., json={'target_lang': ...}),然后r.json() 反序列化响应?
  • 哦,它有效!谢谢 :) 我用过: import requests import ast r = requests.post(url='api.deepl.com/v2/translate', data = { 'target_lang' : 'FR', 'auth_key' : 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'', 'text': '亲爱的是 denn los hier 吗?'}) r.json()['translations'][0]['text'] 我得到 >> 'Chérie, que se passe-t-il ici ?'

标签: python api utf-8 python-requests deepl


【解决方案1】:

我用过:

import requests 
import ast 
r = requests.post(url='api.deepl.com/v2/translate', 
      data = { 'target_lang' : 'FR', 
               'auth_key' : 'xxxxxxxxxxxxxxxxxxxxxxxxxxx', 
               'text': 'Honey Was it denn los hier?'}) 

print(r.json()['translations'][0]['text'])

我得到:

'Chérie, que se passe-t-il ici ?

谢谢 lenz ;)

【讨论】:

  • 为什么不用json=参数发送payload?
  • 它没有,它们是额外的优势吗?
  • 哦,我猜我错了。使用data=,有效负载正在被形式编码,这显然是API 所期望的。我只是习惯于在 POST 请求中将有效负载作为 JSON 发送。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多