总结python中的乱码问题
首先要知道,字符串在Python内部的表示是unicode编码(万国码),因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
python编码有两种数据模型来支持字符串类型 一种是str 一种是unicode。
s=”中文” 为str类型的字符串
u=u”中文” 为unicode类型的basestring
首先str 需要先decode(解码)成为unicode ,str->decode->unicode
然后将unicode通过encode(编码)成为str, unicode->encode->str
解释一下decode和encode:
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中的乱码问题相关推荐
- python中的中文乱码问题深入分析
网址 :http://www.jb51.net/article/26543.htm 在本文中,以'哈'来解释作示例解释所有的问题,"哈"的各种编码如下: 1. UNICODE (U ...
- python中字符串中文乱码_[python] 中文乱码问题
乱码产生的原因 乱码产生的根本原因是字节流转换字符前后不一致导致.只要掌握了这个核心,就能解决乱码问题.python2中使用了一些"trick"(没有区分字符和字节流),所以理解起 ...
- 乱码问题引申 python 中string和unicode
HtmlTestRunner的乱码问题 1生成的报告中,对print打印的数据都记录下来,但是数据有些会存在乱码.如下面.有些又没有乱码. 这到底是怎么回事呢? str=t.encode('utf-8 ...
- python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
[背景] Python中的字符编码,其实的确有点复杂. 再加上,不同的开发环境和工具中,显示的逻辑和效果又不太相同,尤其是,中文的,初级用户,最常遇到的: (1)在Python自带的IDE:IDLE中 ...
- linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案
Python中使用subprocess.Popen返回值乱码解决方案 问题描述 在python 2.7中,使用subprocess.Popen()调用*nix命令,并通过管道,获取其输出,并将其返回值 ...
- python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
如下所示: #-*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt from matplotlib.font_ ...
- python中解决中文乱码
解决中文乱码 什么是字符编码 python 的字符编码 encode和decode unicode还可以decode吗? UTF-8还可以encode吗? 解决中文编码问题 问题1:使用request ...
- 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况(split、zip...)
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...
- python中字符串输出乱码怎么解决_python字符乱码的解决小结
引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正 ...
最新文章
- 监管大屏系统_高速公路监管系统大屏可视化
- java jdk1.8环境变量的配置
- Java基础之Switch语句
- bzoj 3224 普通平衡树 vactor的妙用
- 干掉了竞争对手的餐饮夫妻店,在等待自己的死亡
- Codeforces 766E Mahmoud and a xor trip(树形DP)
- oracle vm virtualbox 虚拟光盘_虚拟机管理神器Vagrant完整操作手册来了
- 操作config文件
- 基于M6097 switch的STP协议调试方法
- 国际标准UTC时间转化北京时间
- zabbix mysql安装配置_Zabbix安装图解教程 | 系统运维
- 用Python网络爬虫来看看最近电影院都有哪些上映的电影
- ArcGIS中相对高程的提取
- 手机投影到deepin
- “Navicat Premium”已损坏,无法打开。 您应该将它移到废纸篓。
- 【实验五 一维数组】7-6 sdut- C语言实验-数日子
- 沈航计算机考研专业课,2018年沈阳航空航天大学计算机学院811操作系统之计算机操作系统考研基础五套测试题...
- 【交换篇】(6.4) ❀ 01. HA 状态下的核心交换机连接方法 (上) ❀ FortiSwitch 交换机
- UCI 机器学习数据集
- 使用hmailserver搭建邮件服务器