CCJ做项目需要用到语音API,而这个API是存在中文URL的,URL的访问和解析都需要转成Unicode编码,而Python默认编码又是UTF8,因此在编写的时候需要进行一个转换。
Eg.1 访问,解析中文:
import urllib
import re
from urllib import request
"""
这个例子是:
访问的URL存在中文,利用正则表达式匹配+转换的方式提取URL的中文
"""
# 需要访问的 URL
url = "https://api.oick.cn/txt/apiz.php?text=老王测试&spd=2"
# 编码 - 把存在中文的URL编程万国码
data = urllib.parse.quote(url)
print("编码后URL:", data)
# 发送请求…… 这里忽略
# 假设接收data就是接收到的请求,进行解码
de_data = request.unquote(data, encoding='utf-8') # 解码,将url中转码的中文字符解码
print("解码后URL:", de_data)
# 用匹配所有中文字符
pattern = re.compile("[^\u4e00-\u9fa5]")
onlyChinese = re.sub(pattern, '', de_data) # 将模式外的所有字符用空代替,即非中文字符
print("从中提出的中文:", onlyChinese)
Eg.2 提交带中文的URL:
import urllib
import re
from urllib import request
url = "https://api.oick.cn/txt/apiz.php?"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
}
formData = {
"text":"老王说鸡哥牛逼",
"spd":"5"
}
#会生成:url = "https://api.oick.cn/txt/apiz.php?text=老王说鸡哥牛逼&spd=5"
# 编码,发送
data = urllib.parse.urlencode(formData).encode(encoding="UTF8")
req = request.Request(url=url,data=data,headers=headers)
# 接受返回
response = request.urlopen(req)
move_info = response.read().decode()
0 条评论