简单的概念与说明

编码(动词):按照某种规则(这个规则称为:编码(名词))将“文本”转换为“字节流”。而在python 3中则表示:unicode变成str

解码(动词):将“字节流”按照某种规则转换成“文本”。而在python3中则表示:str变成unicode

Python中编码、解码与Unicode的联系

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

在新版本的python3中,取消了unicode类型,代替它的是使用unicode字符的字符串类型(str),字符串类型(str)成为基础类型如下所示,而编码后的变为了字节类型(bytes)但是两个函数的使用方法不变:

      decode              encode
bytes ------> str(unicode)------>bytes
u = '中文' #指定字符串类型对象u
str = u.encode('gb2312') #以gb2312编码对u进行编码,获得bytes类型对象str
u1 = str.decode('gb2312')#以gb2312编码对字符串str进行解码,获得字符串类型对象u1
u2 = str.decode('utf-8')#如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的字符串内容

避免不了的是,文件读取问题:

假如我们读取一个文件,文件保存时,使用的编码格式,决定了我们从文件读取的内容的编码格式,例如,我们从记事本新建一个文本文件test.txt, 编辑内容,保存的时候注意,编码格式是可以选择的,例如我们可以选择gb2312,那么使用python读取文件内容,方式如下:

f = open('test.txt','r')
s = f.read() #读取文件内容,如果是不识别的encoding格式(识别的encoding类型跟使用的系统有关),这里将读取失败 '''假设文件保存时以gb2312编码保存'''
u = s.decode('gb2312') #以文件保存格式对内容进行解码,获得unicode字符串 '''下面我们就可以对内容进行各种编码的转换了'''
str = u.encode('utf-8')#转换为utf-8编码的字符串str
str1 = u.encode('gbk')#转换为gbk编码的字符串str1
str1 = u.encode('utf-16')#转换为utf-16编码的字符串str1

codecs进行文件的读取

python给我们提供了一个包codecs进行文件的读取,这个包中的open()函数可以指定编码的类型:

import codecs
f = codecs.open('text.text','r+',encoding='utf-8')#必须事先知道文件的编码格式,这里文件编码是使用的utf-8
content = f.read()#如果open时使用的encoding和文件本身的encoding不一致的话,那么这里将将会产生错误
f.write('你想要写入的信息')
f.close()

最新文章

  1. ps你最容易忽略的知识
  2. Linux常用命令小结(续)
  3. 一个插件让你在chrome直接运行apk
  4. 网站(logo,主机)
  5. 微信支付开发(12) 认清微信支付v2和v3
  6. java 字节流与字符流的区别 (转)
  7. 实现类似QQ的折叠效果
  8. SQL SERVER IN参数化处理
  9. Android Annotations(1)
  10. 图像处理------快速均值模糊(Box Blur)
  11. linux常用命令随记
  12. SQL ----post漏洞测试注入
  13. C# Dev XtraReport 简单测试
  14. 【mongoDB高级篇③】综合实战(1): 分析国家地震数据
  15. spring注解之@PostConstruct在项目启动时执行指定方法
  16. wepy打开页面首次不显示,但是数据已经有了
  17. springboot读取properties和yml配置文件
  18. 单选按钮QRadioButton
  19. 【BZOJ2001】 [Hnoi2010]City 城市建设
  20. C++第七次作业

热门文章

  1. 【loj-1055-Going Together-三个棋子推箱子走到目的地--讲预判的bfs】
  2. springboot整合shiro引用配置文件配置redis信息报空指针异常
  3. AtCoder Beginner Contest 143 F - Distinct Numbers
  4. 微信小程序学习记录(一)
  5. 007——转载-MATLAB读取文件夹下的文件名
  6. 006_硬件基础电路_MOS管
  7. 转,SqlServer 基础之(触发器)
  8. learning scala sealed class
  9. [GXOI/GZOI2019]特技飞行
  10. Python多线程笔记(三),queue模块