解决python中遇到的乱码问题

1. 解决中文乱码的一种可行方法

 1 # -*- coding:utf-8 -*-
 2 from __future__ import unicode_literals
 3
 4 import chardet
 5
 6
 7 def smart_decoder(raw_content, default_encoding_list=("utf-8", "gb18030")):
 8     """
 9     将字符串解码成unicode
10     :type default_encoding_list: list of str
11     :rtype: unicode
12     :type raw_content: str|unicode
13     """
14     if isinstance(raw_content, unicode):
15         return raw_content
16
17     encoding = chardet.detect(raw_content).get("encoding", "utf-8")
18
19     try:
20         return raw_content.decode(encoding)
21     except UnicodeEncodeError as e:
22         for encoding in default_encoding_list:
23             try:
24                 return raw_content.decode(encoding)
25             except UnicodeEncodeError as e:
26                 pass
27         raise e
28
29
30 if __name__ == ‘__main__‘:
31     import requests
32
33     a = requests.get("https://www.baidu.com").content
34     smart_decoder(a)

2. requests响应结果乱码

使用requests请求网址,获取响应response, 通过response.text得到的网页内容,有时候会出现乱码的情况。

原因:

  分析源代码发现,调用respose.text 其实就是对 response.content执行解码操作。编码通过chardet判断。

  乱码的关键是,chardet获取的编码可能不正确,但在执行response.content.decode时,程序会直接忽略编码异常,从而导致使用错误的编码解码。

解决思路:

  人工解码,处理编码错误

程序demo

1 def parse_response(response):
2     """
3     手工对requests的响应内容解码
4     :rtype: unicode
5     """
6     return smart_decoder(response.content)
时间: 2024-10-30 05:54:47

解决python中遇到的乱码问题的相关文章

sae python中Mysql中文乱码的解决

一开始我用的是: db=MySQLdb.connect(db=sae.const.MYSQL_DB,user=sae.const.MYSQL_USER,passwd=sae.const.MYSQL_PASS,host=sae.const.MYSQL_HOST,port=int(sae.const.MYSQL_PORT)) 数据库编码与python代码的编码都已设为utf8,在PHPMyAdmin中添加中文记录,在网页查询显示中却显示乱码,我在网上各种搜索都找不到解决方法.最后终于发现在连接数据库

解决jsp中的中文乱码问题笔记

一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供大家参考. 一.JSP页面显示乱码 下面的显示页面(display.jsp)就出现乱码: <html> <head> <title>JSP的中文处理</title> <meta http-equiv="Content-Type" con

解决 python 中读写文件的终极方案 UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0x9d in position 1270: illega

UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 1270: illegal multibyte sequence 上面是遇到的错误,本来想完成读文件,再写入另一文件的.但是在 fp.read() 时,一直遇到上面的错误,经过各种百度,google, 还有神奇的 stackoverflow 才知道是字符流的问题. 知道问题所在,还是没有解决,又苦苦搜索,终于在 stackoverflow 上找到灵感,可以把 op

解决python中&#39;chromedriver&#39; executable needs to be in PATH报错

在使用python中的selenium模块的时候出现以下错误 解决: 问题是没有Chrome 驱动,那么先下载驱动. 下载之前先查看自己chrome当前的版本信息: 点击chrome浏览器右上角的圆圈标记处,在帮助-->关于Google Chrome(E)中查看浏览器的版本信息 之后打开网址http://npm.taobao.org/mirrors/chromedriver/找到对应的版本,下载并解压到自己想放的路径中. 然后在代码中添加chromedriver文件路径 from seleniu

解决python中selen模块中&#39;list&#39; object has no attribute &#39;send_keys&#39;报错

程序在执行如下代码的时候报错'list' object has no attribute 'send_keys' 解决: 把find_elements_by_id方法改成find_element_by_id 参考: https://stackoverflow.com/questions/29957373/selenium-python-send-key-error-list-object-has-no-attribute 解决python中selen模块中'list' object has no

解决Python中出现的问题: “You are using pip version 9.0.1, however version 19.2.3 is available. You should consider upgrading via the &#39;python -m pip install --upgrade pip&#39; command.”

1. 一开始我在使用Pycharm时,导入numpy库,发现导入错误: Non-zero exit code (1) 2. 于是我通过更新的方法来解决,哪知道在更新的时候也出现了错误,错误如下图: 这个错误是在告诉我,我的版本低,需要升级更高的版本才能使用命令python -m pip install --upgrade pip 3. 输入: conda install pip 命令提示我又出现了错误,内容是You don't appear to have the necessary permi

解决Python操作MySQL中文乱码的问题

原始代码: import os, sys, string import MySQLdb MYSQL_HOST = 'localhost' MYSQL_PORT = '3306' MYSQL_USER = 'root' MYSQL_PASS = '' MYSQL_DB = 'app_hwms' def main(): try: conn = MySQLdb.connect(host=MYSQL_HOST,user=MYSQL_USER ,passwd=MYSQL_PASS,db=MYSQL_DB)

解决Python中不能输入汉字的问题

我们在python的IDE中有时候会输入中文,python对中文不是太友好.现在我们就解决这个问题.一般情况下在你的代码前面加入: # coding: utf-8 reload(sys)sys.setdefaultencoding("utf-8") 基本上就可以了

解决Eclipse中springBoot中文乱码问题

除了常见的application.properties文件中设置#设置spring-boot 编码格式banner.charset=UTF-8server.tomcat.uri-encoding=UTF-8spring.http.encoding.charset=UTF-8spring.http.encoding.enabled=truespring.http.encoding.force=truespring.messages.encoding=UTF-8以及 @RequestMapping(