url或请求头中直接传递中文导致乱码的方式

url或请求头中直接传递中文导致乱码的方式

http规范

根据http规范, HTTP 请求头的内容必须是 ASCII 字符。请求链接中,如果包含中文,也必须进行url编码,将其转换成 ascii 字符,然后进行解析请求

但是如果不按照规范,直接传递中文请求头,或者中文链接,在服务器端如何解决

python 中 Flask 编解码

在Flask 中,会对链接进行 decode,也就是将字符串转换为 ascii, 这个 编码方式默认是 iso-8859-1 编码,这个编码兼容 ascii

如果传递中文的话,且中文采用的 utf-8 编码传递,flask解码后就会出现乱码错误

在网络传输过程中, 大致过程是: utf-8 -> byte -> flask读取 -> iso-8859-1

读取后的解码采用了不符合的编码。所以乱码

还原中文

如果请求头中文乱码,需要重新解码

....

# 读取请求头字符串
testaa = request.headers.get('X-Custom-Head')

# 以 iso-8859-1 将字符串解码为 byte
testaa_utf8 = white_region.encode('iso-8859-1')

# 重新将 byte 以 utf8 转为字符串
print('test', testaa_utf8.decode('utf-8'))

...

在 flask 中,由于用了 iso-8859-1 编码,所以重新将其转为 字节,再将字节转为 utf-8 字符串即可

这种方式虽然可以正确读取中文,但实际上,这并非http规范所支持的方式

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2025/03/06/url或请求头中直接传递中文导致乱码的方式

Buy me a cup of coffee ☕.