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规范所支持的方式