Моя цель — закодировать этот дикт с текстом cyrilic:
target_dict = {"Animal": "Cat", "city": "Москва"}
К этому (cyrilic lettesrs with lower case закодировано):
Animal=Cat&city=%d0%9c%d0%be%d1%81%d0%ba%d0%b2%d0%b0
По умолчанию с python он кодируется с помощью UPPER CASE, это мой код:
import urllib.parse
target_dict = {"Animal": "Cat", "city": "Москва"}
encoded = urllib.parse.urlencode(target_dict)
print(encoded)
Он возвращает city с UPPER CASE, мне нужен только город в нижнем регистре:
Animal=Cat&city=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0
I need to get city (cyriclic text) с lower case эти два результата на самом деле одинаковы, но сервис, который я пытаюсь подключить, хочет именно lowercase.
@deceze я не могу использовать .lower(), потому что это снизит весь мой результат, но мне нужно только one field which containts cyrilic in it, в примере я добавил больше данных, мне нужно Animal=Cat оставаться в своем состоянии






Этот код использует ту же библиотеку, но другой метод:
from urllib import parse
def url_encoded_cyrillic(target_dict):
url_quote = set()
result = parse.urlencode(target_dict)
for value in target_dict.values():
for char in value:
encoded_char = parse.quote(char, safe='')
if encoded_char != char:
url_quote.add(encoded_char)
for encoded_item in url_quote:
result = result.replace(encoded_item, encoded_item.lower())
return result
target_dict = {"Animal": "Cat", "city": "Москва :/- Москва", "car": "", "tOwn": "New York"}
print(url_encoded_cyrillic(target_dict))
он вернется:
Animal=Cat&city=%d0%9c%d0%be%d1%81%d0%ba%d0%b2%d0%b0+%3a%2f-+%d0%9c%d0%be%d1%81%d0%ba%d0%b2%d0%b0&car=&tOwn=New+York
encoded.lower()…!?