首先要知道,字符串在Python内部的表示是unicode编码(万国码),因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

python编码有两种数据模型来支持字符串类型 一种是str 一种是unicode。

s=”中文” 为str类型的字符串
u=u”中文” 为unicode类型的basestring

首先str 需要先decode(解码)成为unicodestr->decode->unicode
然后将unicode通过encode(编码)成为strunicode->encode->str

解释一下decodeencode
decode

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。

encode

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

代码中字符串的默认编码与代码文件本身的编码一致,至于如何查看网页的编码方式可以查看博客说明。

如:s=’中文’
如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

如果字符串是这样定义:s=u’中文’

则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。

如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:
isinstance(s, unicode) #用来判断是否为unicode
用非unicode编码形式的str来encode会报错

在python的头部需要声明默认的编码方式: #-- coding:utf-8 -- (或者是#coding=utf-8) ->(文中若有用到非ascii字符时则用)

大致思路:
乱码->unicode中转码->我们需要的编码方式
decode()->unicode->encode转化为需要的格式

举例:
content为从文件中读取的gbk编码的内容,我们通过以上方法输出该内容。
print content.decode(‘gbk’).encode(‘utf-8’)
这里的decode方法将content内容转为unicode格式
这里的encode方法将unicode格式的数据转化为自己所需要的编码方式。

另外,在爬取网页的时候经常会遇到乱码,但是我们可以通过查看网页的源代码查看charset方式,也可以通过python编程获得网页的编码方式。

下面就拿爬取百度首页来讲解一下:

方法一:

>import urllib2
>url="http://www.baidu.com"
>data=urllib2.urlopen(url).read()
>print data.decode('utf-8','ignore').encode('gbk','ignore')

这里使用的是python的urllib2模块读取百度首页的html

方法二:

>from bs4 import BeautifulSoup
>url="http://www.baidu.com"
>content=urllib2.urlopen(url)
>soup=BeautifulSoup(content,from_encoding="utf-8")
>print soup.encode('gbk')

这里是使用的python的BeautifulSoup模块及urllib2模块。
from_encoding=”utf-8”为该打开的网页的charset方式,encode(’gbk’)为你想要转换成的编码方式。

注意:

s.decode(“utf-8”, “ignore”) 忽略其中有异常的编码,仅显示有效的编码
s.decode(“utf-8”, “replace”) 替换其中异常的编码,这个相对来可能一眼就知道那些字符编码出问题了。

总结python中的乱码问题相关推荐

  1. python中的中文乱码问题深入分析

    网址 :http://www.jb51.net/article/26543.htm 在本文中,以'哈'来解释作示例解释所有的问题,"哈"的各种编码如下: 1. UNICODE (U ...

  2. python中字符串中文乱码_[python] 中文乱码问题

    乱码产生的原因 乱码产生的根本原因是字节流转换字符前后不一致导致.只要掌握了这个核心,就能解决乱码问题.python2中使用了一些"trick"(没有区分字符和字节流),所以理解起 ...

  3. 乱码问题引申 python 中string和unicode

    HtmlTestRunner的乱码问题 1生成的报告中,对print打印的数据都记录下来,但是数据有些会存在乱码.如下面.有些又没有乱码. 这到底是怎么回事呢? str=t.encode('utf-8 ...

  4. python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...

    [背景] Python中的字符编码,其实的确有点复杂. 再加上,不同的开发环境和工具中,显示的逻辑和效果又不太相同,尤其是,中文的,初级用户,最常遇到的: (1)在Python自带的IDE:IDLE中 ...

  5. linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案

    Python中使用subprocess.Popen返回值乱码解决方案 问题描述 在python 2.7中,使用subprocess.Popen()调用*nix命令,并通过管道,获取其输出,并将其返回值 ...

  6. python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题

    如下所示: #-*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt from matplotlib.font_ ...

  7. python中解决中文乱码

    解决中文乱码 什么是字符编码 python 的字符编码 encode和decode unicode还可以decode吗? UTF-8还可以encode吗? 解决中文编码问题 问题1:使用request ...

  8. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况(split、zip...)

    先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...

  9. python中字符串输出乱码怎么解决_python字符乱码的解决小结

    引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正 ...

最新文章

  1. 监管大屏系统_高速公路监管系统大屏可视化
  2. java jdk1.8环境变量的配置
  3. Java基础之Switch语句
  4. bzoj 3224 普通平衡树 vactor的妙用
  5. 干掉了竞争对手的餐饮夫妻店,在等待自己的死亡
  6. Codeforces 766E Mahmoud and a xor trip(树形DP)
  7. oracle vm virtualbox 虚拟光盘_虚拟机管理神器Vagrant完整操作手册来了
  8. 操作config文件
  9. 基于M6097 switch的STP协议调试方法
  10. 国际标准UTC时间转化北京时间
  11. zabbix mysql安装配置_Zabbix安装图解教程 | 系统运维
  12. 用Python网络爬虫来看看最近电影院都有哪些上映的电影
  13. ArcGIS中相对高程的提取
  14. 手机投影到deepin
  15. “Navicat Premium”已损坏,无法打开。 您应该将它移到废纸篓。
  16. 【实验五 一维数组】7-6 sdut- C语言实验-数日子
  17. 沈航计算机考研专业课,2018年沈阳航空航天大学计算机学院811操作系统之计算机操作系统考研基础五套测试题...
  18. 【交换篇】(6.4) ❀ 01. HA 状态下的核心交换机连接方法 (上) ❀ FortiSwitch 交换机
  19. UCI 机器学习数据集
  20. 使用hmailserver搭建邮件服务器

热门文章

  1. 【数据结构--散列函数】
  2. win10本地搜索应用没反应怎么解决?
  3. centos7安装dos2unix
  4. 特征工程之one-hot解读
  5. 结构化数据和非结构化数据、半结构化数据的区别-归纳总结整理
  6. 欧几里得算法及其扩展欧几里得算法——数论
  7. python模拟登录qq邮箱
  8. Blocked a frame with origin XXX from accessing a cross-origin 跨域问题解决方案
  9. 蒙特卡洛方法 matlab 实现
  10. 数据看板--日报、周报、月报