You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用urllib实现西里尔字母小写URL编码

解决urllib.parse.urlencode生成小写URL编码的问题

当使用Python的urllib.parse.urlencode处理包含非ASCII字符(比如西里尔文)的字典时,默认生成的URL编码是大写的十六进制格式,但如果对接服务要求必须使用小写编码,可以通过以下两种方法解决:

方法一:正则替换默认编码结果

先用urlencode生成标准编码字符串,再用正则表达式将%后的大写十六进制字符替换为小写:

import urllib.parse
import re

target_dict = {"Animal": "Cat", "city": "Москва"}

# 生成默认大写编码
encoded_str = urllib.parse.urlencode(target_dict)
# 替换%后的大写十六进制为小写
lowercase_encoded = re.sub(r'%([0-9A-F]{2})', lambda m: f'%{m.group(1).lower()}', encoded_str)

print(lowercase_encoded)
# 输出: Animal=Cat&city=%d0%9c%d0%be%d1%81%d0%ba%d0%b2%d0%b0

方法二:手动编码键值对后拼接

逐个对字典的键和值进行URL编码,将编码结果转为小写后再拼接成最终的查询字符串:

import urllib.parse

target_dict = {"Animal": "Cat", "city": "Москва"}

encoded_pairs = []
for key, val in target_dict.items():
    # 分别编码键和值并转小写
    encoded_key = urllib.parse.quote(key).lower()
    encoded_val = urllib.parse.quote(val).lower()
    encoded_pairs.append(f"{encoded_key}={encoded_val}")

lowercase_encoded = '&'.join(encoded_pairs)

print(lowercase_encoded)
# 输出: Animal=Cat&city=%d0%9c%d0%be%d1%81%d0%ba%d0%b2%d0%b0

方法对比

  • 方法一更简洁高效,适合无额外处理需求的常规场景;
  • 方法二更灵活,若需要对单个键或值做自定义处理(比如特殊字符过滤)时更适用。

内容的提问来源于stack exchange,提问作者oruchkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:30:41