Python的编码问题

作者: 布拉豆 | 来源:发表于2017-04-20 16:23 被阅读61次

Python3 最重要的一项改进之一就是解决了 Python2 中字符串与字符编码遗留下来的这个大坑。港真,就这一点,安利Python3入门呐

首先介绍一下什么是编码

在人类社会,不同国家有不同的标准语法,简体汉语、繁体汉语、美式英语、英式英语等.....

但是机器保存数据是以一种特殊的方式来保存,读取的时候也是以同样的方式来解读。

在Python3当中,默认处理中文的方式叫UTF-8。【对比看伤害:UTF-8支持中文,Python2默认格式是ASCII,不支持中文】

同样的一个中文词语,例如:"中国",经过UFT-8方法转存到硬盘中,比如保存成了"110",再通过UFT-8方法读取,也是显示"中国";通过另一种方法转存到硬盘中,"中国"则会保存成"101",然后通过UTF-8读取,肯定不会显示成"中国",也许就是一个乱七八糟的乱码"烫烫烫烫烫烫烫烫烫";

虽然上面的110、119、烫烫烫是乱填的,下面示例代码中有具体值,总之一个:想要显示正常,读取数据时格式,必须和保存数据时一致

Python3的编码介绍

闲扯几句——Python2 字符串设计上的一些缺陷:

  • 使用ASCII 码作为默认编码方式,对中文处理很不友好。
  • 把字符串牵强地分为 unicode 和 str 两种类型,误导开发者

以上提及的两个问题,Python3都很好的解决了

  • 首先,Python3 把系统默认编码设置为 UTF-8
  • 然后,文本字符和二进制数据区分得更清晰,分别用 str 和 bytes 表示。

文本字符全部用 str 类型表示,str 能表示 Unicode 字符集中所有字符,而二进制字节数据用一种全新的数据类型,用 bytes 来表示。

具体示例

先定义str类型的字符串:

>>> one_str = "第一个字符串"
>>> one_str
'第一个字符串'
>>> type(one_str)
str

通过str字符串,拿到byte类型数据

>>> two_byte = one_str.encode()
>>> two_str
b'\xe7\xac\xac\xe4\xb8\x80\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
>>> type(two_str)
bytes

上面的one_str是字符串类型str,并通过编码函数encode(),得到二进制类型参数two_byte。

既然通过字符串通过编码得到了二进制数据,那二进制数据肯定可以通过解码的形式得到字符串

>>> two_byte.decode()
'第一个字符串'
python3的字符串和二进制数据

当然,在做Python爬虫经过会遇到类似'\u4e2d\u56fd'的Unicode编码格式的数据,导致显示的不是中文

一般打印的都是str类型,这里提供个解析方法:

>>> decode_str = "\\u4e2d\\u56fd"
>>> decode_byte = decode_str.encode() #str只有编码函数,先编码
>>> decode_byte #打印byte类型变量的数据
b'\\u4e2d\\u56fd'
>>> decode_byte.decode('unicode-escape') #decode解码函数,按照unicode的数据方法解码
'中国'

在Python3版本当中,str类型只有encode编码函数,已经没有的decode解码函数,所以先变成byte类型,再使用decode解码函数。

上面的示例是str类型的字符串,如果"\\u4e2d\\u56fd"b"\\u4e2d\\u56fd"byte类型,则可以省去decode_byte = decode_str.encode()这句语句,直接decode解码就可以拿到正确汉字了

Python3的unicode和byte以及str

更多课程,点击这里Spbeen-Python3教程

相关文章

  • python 编码问题总结记录

    Python2的默认编码ASCII,这是python编码问题的根本原因,可以想象,python3的编码问题肯定没有...

  • Python优秀博客笔记汇总(持续更新)

    还在烦编码问题? Python 编码错误的本质原因 Python 编码为什么那么蛋疼? Python3 是如何解决...

  • learning

    python在终端进行文件的运行在终端输入 python test.py 时间时间的转换 编码python编码问题

  • Python程序的中文在cmd中乱码问题

    刚开始学python遇到的问题,编码的问题。程序编码是UTF-8,cmd默认是GBK编码

  • 【python报错】UnicodeDecodeError: &#

    一、问题 二、原因 编码问题:整个Python文件的编码以及文件读取的编码 三、解决方案 1、编码设置 第一行没有...

  • 学习资料

    简明python教程Python2字符编码问题小结stackoverflow about python

  • 记录一下python2.7中文数组传入json的问题

    标签: python2.7 编码 python中遇到的至少三分之一的问题,都是编码问题,而且这种问题呀,看起来是小...

  • python 编码问题

    以前python2.x版本的编码问题较多,所以这里只针对python3.x版本的问题进行讨论。 Unicode 编...

  • python编码问题

    1. python2中关于utf-8编码问题解决方法: 或者开头加# -*- coding: utf-8 -*-但...

  • Python编码问题

    默认编码 字符串 python2 文本字符串默认编码是ASCII,中文默认UTF-8python3 文本字符串默认...

网友评论

    本文标题:Python的编码问题

    本文链接:https://www.haomeiwen.com/subject/ahcxzttx.html