解决请求参数的中文乱码问题
时间: 2023-10-07 19:06:45 浏览: 208
在 HTTP 请求中,中文字符需要经过编码才能被正确传输。常见的编码方式有 URL 编码和表单编码。
对于 URL 编码,可以使用 `urllib.parse.quote()` 方法将中文字符编码成 `%XX` 的形式。例如:
```
import urllib.parse
params = {'name': '张三', 'age': 20}
query_string = urllib.parse.urlencode(params, encoding='utf-8')
url = 'http://example.com?' + query_string
```
这样,生成的 URL 中就不会出现中文字符,而是被编码成 `%E5%BC%A0%E4%B8%89` 和 `%32%30`。
对于表单编码,可以在请求头中指定编码方式为 `application/x-www-form-urlencoded`,然后将参数编码成类似于 URL 编码的形式。例如:
```
import urllib.parse
import requests
params = {'name': '张三', 'age': 20}
data = urllib.parse.urlencode(params, encoding='utf-8')
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
response = requests.post('http://example.com', data=data, headers=headers)
```
这样发送的数据就可以包含中文字符了。
如果服务端接收到的参数依然是乱码,可以尝试在服务端对参数进行解码。对于 Python Flask 框架,可以使用 `request.get_data()` 方法获取请求数据,然后使用 `decode()` 方法对数据进行解码。例如:
```
from flask import Flask, request
import urllib.parse
app = Flask(__name__)
@app.route('/example', methods=['POST'])
def example():
data = request.get_data()
decoded_data = urllib.parse.unquote(data.decode('utf-8'))
# 处理解码后的参数
```
这样就可以解决请求参数中文乱码的问题了。
阅读全文