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中da_Python中字符的编码与解码相关推荐

  1. 在tcp/ip协议中以BigEndian方式的编码与解码

    2019独角兽企业重金招聘Python工程师标准>>> package com.tcpip;/*** 在tcp/ip协议中以BigEndian方式的编码与解码* @author ** ...

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

    摘要: URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换.在本文中,我们以使用 ...

  3. C语言中如何输出字符的编码,GB2312中汉字字符的编码在C语言中的输出测试

    C语言中ASCII编码表中每一个字符对应的编码,与数字其实是完全一样的. printf("%d\n",1);          对应的输出是1 printf("%c\n& ...

  4. 【Python】base64模块对图片进行base64编码和解码

    图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要消耗一个 http 请求下载而来的. 没 ...

  5. [转载]Unicode中对中文字符的编码

    以前写过一篇贴子是写中文在unicode中的编码范围 unicode中文范围,但写的不是很详细,今天再次研究了下unicode,并给出详细的unicode取值范围. 本次研究的unicode对象是un ...

  6. 计算机英语编码表,在计算机系统中,英文字符的编码一般采用( )。

    15.利用超星数字图书馆,计中字符查找<林徽因传>(张清平著)这本书正文共有多少页() 在IPv4中,算机下列IP地址中属于非法的是________. 在下列Internet的应用中,系统 ...

  7. C语言中如何输出字符的编码,c语言输出字符串(c语言自我介绍编码)

    如果我想要限定输出字符串的长度,应该怎么操作. 在C语言中,输入输出字符串有以下两种方式:1 用scanf/printf输入输出.scanf/printf是C语言的格式化输入输出函数,可以用于输入输出 ...

  8. python 字符的编码和解码

    什么是编码 编码是信息从一种形式或格式转换为另一种形式的过程.例如,将字符A使用ascll编码,首先在ascll中找到字符A对应的一个数字,再将该数字转化为二进制形式,供计算机读取.而不同的编码方式中 ...

  9. signature=b8cae5ae994df93c3fedf622c2a51ac5,javascript中的Base64、UTF8编码与解码详解

    Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充 ...

最新文章

  1. 网站显示mysql数据库_如何显示从MySQL数据库的网站iframe?
  2. gradient设置上下渐变_css3渐变之线性渐变linear-gradient
  3. 在Ubuntu下面编译WizNote Qt Project
  4. 2021的行情下如何能够赚到自己认知范围内的钱?一些投资需要补充的内容
  5. 测试用例的“真相”与“事实” 这9个事实让人扎心!
  6. Kafka ACL使用实战
  7. 台服DNF更换Mysql5.6(rpm包安装、二进制安装)
  8. 【渗透安全】利用腾讯云CDN节点隐藏连接Webshell的真实IP
  9. php 登陆微博,用新浪微博账号登录(第三方登录)
  10. python 绘制RGB三维颜色空间色谱图(已实现)
  11. 介绍ping中的TTL是什么意思
  12. 在chrome浏览器中屏蔽CSDN页面中的广告
  13. Simon游戏代码(C语言)
  14. Java 线程池配置的常见误区
  15. 小猪的Python学习之旅 —— 12.Python并发之queue模块
  16. PHP fwrite和file_put_contents 性能对比测试
  17. 推荐术语:CPM、CPC、CPA、CPI、CTR、CPV、CVR
  18. 二级域名三级域名设置方法
  19. 【适配】521- 移动端开发各种兼容适配问题(屏幕、图像、字体与布局等)
  20. 计算机硬件设备介绍 ppt,计算机硬件设备的认识课件.ppt

热门文章

  1. mysql drbd pacemaker_corosync+pacemaker+mysql+drbd 实现mysql的高可用
  2. Java connot reduce_Java8: Reduce方法
  3. 双目标帕累托优化_多目标稳健性决策规划(MORDM)
  4. “晶振”拍了拍你,“你知道我是如何工作的吗?”
  5. 在阿里、腾讯、美团工作有什么区别?
  6. 程序员崩溃的40个瞬间!(动图)
  7. 从1985年到2020年,编程语言排行有哪些变化?
  8. 自动增益(AGC)算法FPGA实现
  9. deepin编译Linux内核,为Deepin编译Linux 5.10内核的悲伤故事经历:从入门到卸载
  10. Linux复位usb hub,Linux USB subsystem --- USB Hub initialize