python3中的编码

python2字符串编码存在的问题:

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

python3中默认编码方式修改为utf-8。
在存储和显示上,python3使用文本字符和二进制数据进行区分,更加明确和清晰。

文本字符使用str类型表示,str 能表示 Unicode 字符集中所有字符,而二进制数据使用bytes类型表示。

str与bytes之间的转换

一种方式

     # bytes object
      b = b"example"

      # str object
      s = "example"

      # str to bytes
      bytes(s, encoding = "utf8")

      # bytes to str
      str(b, encoding = "utf-8")
    

另一种方式,默认使用utf-8.

     # bytes object
      b = b"example"

      # str object
      s = "example"

      # an alternative method
      # str to bytes
      str.encode(s)

      # bytes to str
      bytes.decode(b)

常见错误

auth = base64.b64encode("%s:%s" % (user, passwd))
File "/Users/.venv/lib/python3.6/base64.py", line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: <work at 0x104cb4518>: a bytes-like object is required, not ‘str‘
make: *** [work] Error 1

出现这种错误是由于str和bytes使用搞混,按照上面介绍的方式进行正确编解码即可。

原文地址:https://www.cnblogs.com/lanyangsh/p/10467190.html

时间: 2024-11-08 07:34:52

python3中的编码的相关文章

python3中的编码问题

一提到编码,我们脑子里就会想到unicode, utf-8 ,gbk 等类型的编码. 但事实上,unicode和utf-8,gbk并不是同一级别的代码. python3中,unicode是内存里统一使用的编码,内存里所有的数据(比如str对象)都是用unicode编码的. 可以看到,添加u前缀以后,str对象没变化,说明原本就是unicode 从unicode编码转换成别的类型的编码,这个过程叫编码 (encode) 从别的类型的编码转换为unicode,这个过程叫解码 (decode) 由此你

Python2 和 Python3 中默认编码的差异

最近在使用 Python3.4 做一些脚本实现,发现对于编码的处理上和 Python2.6 有很大的不同,就此机会把相关知识做个梳理,方便需要的时候查阅. 先说下概念和差异: 脚本字符编码:就是解释器解释脚本文件时使用的编码格式,可以通过 # -\*- coding: utf-8 -\*- 显式指定解释器字符编码:解释器内部逻辑过程中对 str 类型进行处理时使用的编码格式Python2 中默认把脚步文件使用 ASCII 来处理(历史原因请 Google)Python2 中字符串除了 str 还

一篇文章助你理解Python3中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解Python2中字符串编码问题.下面在Python3环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 在Python2的Python文件的文件头往往会声明字符的编码格式,通过会使用代码"#-*- coding -*-"作为编码声明,如下图所示

python3中的编码与解码原理

先看代码 >>> a = '中文' >>> a '中文' >>> print(a) 中文 >>> b = 'English' >>> b 'English' >>> print(b) English 解释编码和解码的过程 >>> aa = a.encode('utf-8') >>> aa b'\xe4\xb8\xad\xe6\x96\x87' >>&g

python2和python3中的编码问题

开始拾起python,准备使用python3, 造轮子的过程中遇到了编码的问题,又看了一下python3和python2相比变化的部分. 首先说个概念: unicode:在本文中表示用4byte表示的unicode编码,也是python内部使用的字符串编码方式. utf-8:在本文中指最少1byte表示的unicode编码方式 我在使用 if isinstance(key,unicode): key= key.encode('utf-8') 的时候,发现key值被转成了b'foo',b'bar'

一篇文章助你理解Python2中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系.下面在Python2环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 1.首先在Windows操作系统下的Python2环境中进行演示,我们都知道Python2中的编码问题经常出现,需要通过编码(encode)和解码(decode)进行实现.通过cmd进入命令行窗口,然后输入两个字符串'abc'和u'a

python3中各个字符编码的转换

a='我很好' ####python3 默认的编码为unicode###unicode>gb2312unicode_gb2312=a.encode('gb2312') ###因为默认是unicode所以不需要decode(),直接encode成想要转换的编码如gb2312print('我的gb2312',unicode_gb2312) ###返回结果: 我的gb2312 b'\xce\xd2\xba\xdc\xba\xc3'###gb2312>utf8gb2312_utf8=unicode_g

python2 与python3中最大的区别(编码问题bytes&amp;str

1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持 python2 中 >>> s = "abcdefg" >>> b = s.encode()    #或者使用下面的方式 >>> b = b"abcdefg">>> type(b)<type 'str'> python3中     #str

python3中编码和解码

------------恢复内容开始------------ 一.python3与python2.7在字符编码上的差异 python2.7 默认编码是和所在的操作系统一致,windows 是 GBK,macOS是 utf8 ,linux是utf8 python3 编码统一规定默认编码为 Unicode 二.python3中str和bytes的区别 (1)python3有两种数据类型:str 和bytes. 1.编码为Unicode的文本显示为str: 2.其他编码(比如gbk,utf8等)显示为