requests请求返回内容 中文乱码问题

本文讲解了使用Python的Requests库时遇到中文乱码的问题及解决方法。主要原因是requests默认使用iso-8859-1编码,而部分网站如国家统计局未指定编码。通过手动设置或使用apparent_encoding可解决乱码,同时介绍了已爬取的含u5430字符串转换为正常中文的方法。
部署运行你感兴趣的模型镜像

1.为什么有时候request会出现请求的内容中文乱码

以国家统计局的[http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/]为例,开发者模式打开可以看到 Conten-Type没有指定默认的编码。 而requests使用get请求时候,response默认使用iso-8859-1编码对消息体进行编码,传送数据给客户端。
(大部分网页是有指定编码的)。
在这里插入图片描述

2. 解决方法

1.自行设置

查看该网页的网页源代码,还以上面国家统计局的连接为例,搜索charset的编码。然后在代码中指定它的编码格式,重新打印相应内容的text,这次中文就不会乱码问题了。
在这里插入图片描述

res = requests.get(url, headers = header)
res.encoding = ‘gb2312’
pritn(res.text)

2.利用apparent_encoding

res = requests.get(url, headers = header)
res.encoding = res.apparent_encoding
pritn(res.text)

3. 已经爬好的带有\u5430的字符串怎么转为正常的中文显示字符串

python3: 字符串.encode(‘utf-8’).decode(‘unicode_escape’)

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在使用 `requests` 库发送 POST 请求提交表单数据时,如果遇到中文乱码问题,通常是因为编码或解码设置不当。以下是几种有效的解决方案: ### 1. 指定响应内容的编码格式 当服务器返回内容包含中文字符时,可以通过手动指定响应内容的编码格式来避免乱码。例如,可以将响应对象的 `encoding` 属性设置为 `'utf-8'` 或其他合适的编码格式: ```python import requests response = requests.post('http://example.com', data={'key': '中文'}) response.encoding = 'utf-8' print(response.text) ``` ### 2. 使用 `json.dumps` 转换数据 在发送 POST 请求时,可以将表单数据转换为 JSON 字符串,并通过设置请求头中的 `Content-Type` 为 `application/json` 来确保数据正确传输: ```python import requests import json data = {'say': '你好'} response = requests.post('http://example.com', headers={'Content-Type': 'application/json'}, data=json.dumps(data)) print(response.text) ``` ### 3. 对表单数据进行 URL 编码 在发送 POST 请求时,确保表单数据经过 URL 编码,这可以通过 `requests` 库自动处理。只需将数据作为字典传递给 `data` 参数,库会自动进行编码: ```python import requests data = {'key': '中文'} response = requests.post('http://example.com', data=data) print(response.text) ``` ### 4. 设置服务器端编码 确保服务器端能够正确处理 UTF-8 编码的请求。对于 Spring MVC 应用,可以在 `web.xml` 中配置过滤器以设置请求编码: ```xml <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` ### 5. 客户端和服务器端一致性 确保客户端和服务器端都使用相同的编码格式(如 UTF-8),以避免因编码不一致导致的乱码问题
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值