字符编码

(注意:关于字符编码,如果没有特殊业务要求,请牢记仅使用UTF-8编码)

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x = b'ABC'

要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

如果bytes中包含无法解码的字节,decode()方法会报错:

>>> b'\xe4\xb8\xad\xff'.decode('utf-8')
Traceback (most recent call last):...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte

如果bytes中只有一小部分无效的字节,可以传入errors='ignore’忽略错误的字节:

>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'

len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数在操作字符串时,我们经常遇到str和bytes的互相转换。

为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

文本文件设置utf-8读取

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。

当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

会了吗?不会关系,小编创建了一个Python学习交流QQ群:531509025,群里有大量基础入门知识,都是从零开始的,群里还有专业的人给你解答问题。寻找有志同道合的小伙伴,互帮互助,群里还有不错PDF电子书!

Python中必备知识点:对字符编码的基本操作相关推荐

  1. Python中的字符串与字符编码:编码和转换问题

    原文转载自:http://www.cnblogs.com/yyds/p/6171340.html 读后感:最近在跑实验,对于中文编码问题一直感到困扰,读完这篇文章以后,了解了Unicode编码的一些信 ...

  2. 字符编码在python中的处理_python 字符编码处理问题总结

    Python中常常遇到这种字符编码问题,尤其在处理网页源代码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in posit ...

  3. Python中的字符串与字符编码

    本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...

  4. 字符编码在python中的处理_Python 字符编码处理总结

    Python中经常遇到这样那样的字符编码问题,尤其在处理网页源码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in pos ...

  5. Python中的解决中文字符编码的问题

    python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...

  6. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  7. c语言字符串用for语句去重,python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...

    也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...

  8. Python中Unicode字符串(字符串编码问题)

    Python中Unicode字符串(字符串编码问题) 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以 ...

  9. python中空格属于字符吗_举例说明python中空格是属于字符

    python中空格属于字符吗? 答案是肯定的,空格在Python中也是属于字符的. 案例: 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数.#!/usr/bin/python # - ...

最新文章

  1. 三、Bean的初始化
  2. 数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(上)
  3. 转: object 和embed 标签播放flash
  4. 听说又被 JVM 内存区域方面的面试题给虐了?看看这篇文章吧!
  5. HDOJ1216 Assistance Required 打表
  6. sap abap中动态指定查询条件
  7. oracle取两条sql查询结果的差集,并集,交集
  8. Linux fast open,Linux内核3.7 TCP Fast Open验证实例
  9. security中的@EnableGlobalMethodSecurity注解详解
  10. IE下get传中文乱码的问题完美解决方案
  11. 三管齐下!TB 级文件的上传性能瞬间被优化 100 倍!
  12. Flutter实战之顶部导航栏以及ListView简单应用
  13. Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)
  14. 为eclipse3.6安装subversive插件
  15. 高清录播系统与流媒体服务器,校园高清一体式高清录播系统教学录播跟踪网络直播...
  16. [每日一氵] Python 训练过程中,如何优雅的保存loss
  17. 写给冬天里开放的那些花儿
  18. WZOI-348机动车违章识别系统
  19. C语言小黄鸭☞循环结构do{}while()
  20. Android客户端Monkey稳定性测试

热门文章

  1. maven junit scope test坑
  2. 17天17个Python设计模式--目录
  3. python__基础 : 类的__init__,__str__,__del__方法
  4. iftop 监控linux服务器网卡流量
  5. BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls
  6. 【Android】Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口
  7. 对Java泛型的简单理解
  8. c语言使单片机输出低电平,单片机开发中的一些实用技巧
  9. SAPCAR 压缩解压软件的使用方法
  10. 账簿登记重要十条规则