“latin-1”编解码器无法对字符进行编码

swo*_*wor 15 python python-requests

我的代码适用于英语文本,但不适用于俄语 search_text。我该如何修复它?

\n

错误文本

\n
\n

UnicodeEncodeError: 'latin-1' 编解码器无法对位置 41-46 中的字符进行编码:正文 ('\xd0\x9c\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0') 不是有效的 Latin-1。如果您想以 UTF-8 编码发送,请使用 body.encode('utf-8') 。

\n
\n

我的代码

\n
import requests\n\n# search_text = "London" # OK: for english text\nsearch_text = "\xd0\x9c\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0" # ERROR: 'latin-1' codec can't encode characters in position 41-46: Body ('\xd0\x9c\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0')\nheaders = {\n    'cookie': 'bci=6040686626671285074; _statid=a741e249-8adb-4c9a-8344-6e7e8360700a; viewport=762; _hd=h; tmr_lvid=ea50ffe34e269b16d061756e9a17b263; tmr_lvidTS=1609852383671; AUTHCODE=VCmGBS9d9sIxDnxN-hzApvPxPoLNADWCZLYyW8JOTcolv2dJjwH7ALYd8dNP9ljxZZuLvoKsDXgozEUt-PjSwXYEDt4syizx1I2LS58gb49kCFae-5uIap--mtLsff2ZqGbFqK5r7buboZ0_3; JSESSIONID=adca48748b8f0c58a926f5e4948f42c0c0aa9463798a9240.1f3566ed; LASTSRV=ok.ru; msg_conf=2468555756792551; TZ=6; _flashVersion=0; CDN=; nbp=; tmr_detect=0%7C1609852395541; cudr=0; klos=0; tmr_reqNum=4; TZD=6.200; TD=200',\n}\n\ndata = '''{\\n "id": 24,\\n "parameters": {\\n "query": "''' + search_text + '''"\\n }\\n}'''\n\nresponse = requests.post('https://ok.ru/web-api/v2/search/suggestCities', headers=headers, data=data)\n\njson_data = response.json()\nprint(json_data['result'][0]['id'])\n
Run Code Online (Sandbox Code Playgroud)\n

我试过

\n
city_name = city_name.encode('utf-8')\n
Run Code Online (Sandbox Code Playgroud)\n

但收到了TypeError: must be str, not bytes

\n

Mat*_*uel 9

在发布请求之前,尝试在创建数据变量的行之后添加此内容

data=data.encode() #will produce bytes object encoded with utf-8
Run Code Online (Sandbox Code Playgroud)