response.encoding = 'utf-8'
不起作用的原因是,虽然 UTF-8 是最常用的字符编码格式,但在处理带有 \u
形式的 Unicode 转义字符时,UTF-8 编码不会自动将它们转换为可读的中文。utf-8
适合解析直接的二进制内容,而 \uXXXX
形式的 Unicode 字符需要使用 unicode_escape
来正确解析。
区别说明
utf-8
编码:适合解析包含中文字符的字节流,但不会自动解析带有\u
转义格式的 Unicode 字符。unicode_escape
编码:能够将字符串中的\uXXXX
格式自动解码为对应的中文字符。
示例对比
假设你的数据内容类似:
'{"retCode":200,"retDesc":"\\u89e3\\u6790\\u6210\\u529f"}'
此时,response.encoding = 'utf-8'
输出的 response.text
仍然会显示 \u89e3\u6790\u6210\u529f
。而使用 unicode_escape
则能正确显示为 解析成功
。
正确的方式
如果返回的数据中含有 \uXXXX
形式的 Unicode 转义字符,推荐如下做法:
import requests
import json
url = "http://example.com/api" # 替换为实际接口
response = requests.get(url)
# 使用 'utf-8' 编码读取初始文本,防止乱码
response.encoding = 'utf-8'
raw_text = response.text
# 将文本进行二次处理,解析 Unicode 转义字符
parsed_data = json.loads(raw_text)
parsed_data["retDesc"] = parsed_data["retDesc"].encode().decode('unicode_escape')
print(parsed_data)
这样做可以确保文本内容在经过 UTF-8 编码后,再正确解析 Unicode 转义字符。