1 文本和字节序列

  我们都知道字符串,就是由一些字符组成的序列构成串,那么字符又是什么呢?计算机只能识别二进制的东西,那么计算机又为什么会显示我们的汉字,或者是某个字母呢?

  由于最早发明使用计算机是美国人,他们为了解决了英语如何在电脑上显示,就制定了一套标准:ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码),主要用于显示现代英语和其他西欧语言。到目前为止共定义了128个字符,从0-127的二进制数分别对应了相应的字符,这样就将现实中的字符和计算机的二进制联系起来,从而将字符表达显示在计算机上。

  随机计算机的普遍,各国有不同的语言,每个国家为了普及计算机的使用,那么如何将各自国家的语言表达在计算机上就成了一个问题。于是,不同的国家都在制定适用自个国家的字符集,比如对于我国来说,就有gbk《汉字内码扩展规范》,它也是将每个字符(字)和计算机的二进制对应起来。那么问题来了,不同的国家使用各自国家的一套规范,在跨国交流时,就会出现文本显示的乱码。于是就有了一套统一的机制Unicode。Unicode(统一码、万国码、单一码),它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

1.1 字符和字节

  目前使用的基本是Unicode定义的字符,从Python3的str对象中获取的元素就是Unicode字符。字符的具体表述取决于所用的编码。编码是在码位和字节序列之间转换时使用的算法。使用最多的是utf-8编码,使用该编码,文本文件可以跨平台显示。把码位转换成字节序列的过程是编码;把字节转换成码位的过程是解码。

  编码时使用的编码算法要与解码时使用的解码算法相同,要不然会出现乱码的现象。

1.2 字符与字节的转换

  字符是组成字符串有序序列的单个元素,字符可以用上面的编码来理解。字符串按照不同的字符集编码返回字节序列bytes。

  字节序列安装不同的字符集解码返回字符串

1 bytes.decode(encoding="utf-8", errors="strict") -> str
2 bytearray.decode(encoding="utf-8", errors="strict") -> str

1.3 bytes与bytearray

  Python中内置了两种基本的二进制序列类型:Python 3 引入的不可变bytes类型和Python 2.6 增加的可变bytearray类型(字节数组)

1.3.1 bytes定义

  bytes有以下的定义方法:

Definition Function
bytes() 定义空的bytes

bytes(int)

指定字节的bytes,被0填充
bytes(iteeable_of_ints) bytes[0,255]的int组成的可迭代对象
bytes(string, encoding[, errors]) 等价于string.encode()
bytes(bytes_or_buffer)

immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出
一个新的不可变的bytes对象

使用b前缀定义

只允许基本ASCII使用字符形式b'abc9';

使用16进制表示b"\x41\x61"

1.3.2 bytes操作

  和str类型类似,都是不可变类型,所以很多方法都一样。只不过bytes的方法,输入的是bytes,输出的也是bytes。下面看bytes的基本操作:

  • b'abcdef'.replace(b'f',b'k')
  • b'abc'.find(b'b')  
  • bytes.fromhex(string)  string必须是2个字符的16进制的形式,比如bytes.fromhex('6162 09 6a 6b00'),空格将被忽略
  • 'abc'.encode().hex()  返回16进制表示的字符串
  • b'abcdef'[2]  返回该字节对应的数,int类型

1.3.3 bytearray定义

Definition Function
bytearray() 空bytearray
bytearray(int) 指定字节的bytearray,被0填充
bytearray(iterable_of_ints) bytearray [0,255]的int组成的可迭代对象
bytearray(string, encoding[, errors]) bytearray 近似string.encode(),不过返回可变对象
bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象

1.3.4 bytearray操作

  和bytes类型的方法相同:

  • bytearray(b'abcdef').replace(b'f',b'k')
  • bytearray(b'abc').find(b'b')
  • bytearray.fromhex('6162 09 6a 6b00')
  • bytearray('abc'.encode()).hex()
  • bytearray(b'abcdef')[2]  返回该字节对应的数,int类型

  bytearray是字节型的数组,相当于列表一样,只不过bytearray中存储的是字节形式的序列。它也支持和列表一些相同的操作:

Python中字符的编码与解码的更多相关文章

  1. Python中进行Base64编码和解码

    Base64编码 广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有“=”,生成的编码都是ascii字符.优点:速度快,ascii字符,肉眼不可理解缺点:编码比较长,非常容 ...

  2. python中的URL编码和解码

    python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...

  3. python中字符串的编码和解码

    1. 常用的编码 ASCII:只能表示一些字母,数字和特殊的字符,占一个字节 GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unico ...

  4. python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str

    python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...

  5. 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

    原文: https://blog.csdn.net/justloveyou_/article/details/57156039 使用 URLDecoder 和 URLEncoder 对中文字符进行编码 ...

  6. Python之字符与编码笔记

    概述 类型 str 字符串 bytes 字节 bytearray 字节数组 字符串编码架构 字符集:赋值一个编码到某个字符,以便在内存中表示 编码 Ecoding:转换字符到原始字节形式 解码 Dec ...

  7. java中URL 的编码和解码函数

    java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...

  8. 如何在Python 中使用UTF-8 编码 && Python 使用 注释,Python ,UTF-8 编码 , Python 注释

    如何在Python 中使用UTF-8 编码 && Python 使用 注释,Python ,UTF-8 编码 , Python  注释 PIP $ pip install beauti ...

  9. python中字符编码及unicode和utf-8区别

    ascii和unicode是字符集,utf-8是编码集 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point) 编码规则:将「码位」转换为字节序列的规则(编码/ ...

随机推荐

  1. Java之继承性

    为什么要有继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中,多个类可以称为子类,单独那一个类称为父类.超类或者基类. 继 ...

  2. python大作业二

    一.存入csv 上次爬取到了所需要的内容,但是没有存入到csv中,这次存入了csv文件中,代码如下: import requests from bs4 import BeautifulSoup imp ...

  3. Hive部分函数解析

    Hive部分函数解析 Hive里的exists ,in ,not exists ,not in 相关函数 表数据准备: 1.选择指定数据库 eg:  use bg_database1; 2. 创建表 ...

  4. JavaScript定时器方法

    一.setTimeout() 延迟性操作 window.setTimeout(function(){ console.log('派大星');//延迟了4秒 },4000); console.log(' ...

  5. Airtest 之 游戏自动化(5分钟教你王者农药刷金币)

    一.准备工作: 1)安装腾讯手游助手,下载王者荣耀,安装启动( 你也可以直接连接手机启动游戏,或者使用其他的模拟器  ) 2)安装AirtestIDE,在设备窗中连接游戏Windows(详情参考笔者另 ...

  6. .NET轻松实现支付宝服务窗网页授权并获取用户相关信息

    前言: 最近在开发一个商业街区的聚合扫码支付功能,其中需要用到的有支付宝,微信两种支付方式,当然对于开发微信支付而已作为自己的老本行已经比较熟悉了,然而对于我来说支付宝支付还是头一次涉及到.这次项目中 ...

  7. java基础(6):方法

    1. 方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢?可 ...

  8. 结对编程项目复盘:带UI的小初高数学学习软件

    实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...

  9. Linux相关集合

    本篇概述 Linux xshell6 连接 Hadoop 启动关闭 Linux xshell6 连接相关问题 首先,虚拟机 得先能通成网(具体教程可百度) 然后,进行 本机 ip 的查询(xshell ...

  10. swoole1--搭建echo服务器

    1.安装swoole :pecl install swoole,然后修改php.ini 开启swoole扩展:extension=swoole.so 2.写一个服务器Server.php 1 < ...