热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3字符串编码总结str(unicode)<-->bytes

1.字符串的编码形式字符串的编码最一开始是ascii,使用8位二进制表示,因为英文就是编码的全部。后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫un

1.字符串的编码形式

字符串的编码最一开始是ascii,使用8位二进制表示,因为英文就是编码的全部。后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫unicode,unicode编码对所有语言使用两个字节,部分汉语使用三个字节。但是这就导致一个问题,就是unicode不仅不兼容ascii编码,而且会造成空间的浪费,于是uft-8编码应运而生了,utf-8编码对英文使用一个字节的编码,由于这样的特点,很快得到全面的使用。
1.1 ASCII

美国信息交换标准码。 在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),但其最高位(b7)用作奇偶校验位。ASCII(American Standard Code for Information Interchange),是一种单字节的编码。计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号。不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础。
1.3 Unicode、UTF-8

Unicode是业界的一种标准,它可以使电脑得以呈现世界上数十种文字的系统。 后来,有人开始觉得太多编码导致世界变得过于复杂了,让人脑袋疼,于是大家坐在一起拍脑袋想出来一个方法:所有语言的字符都用同一种字符集来表示,这就是Unicode。
Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
1.4 GB2312、GBK、GB18030

GB是中国荒谬的国家标准。GB2312、GBK、GB18030各为前一个的扩展。

2.字节码bytes

python3中bytes用b’xxx’表示,其中的x可以用字符,也可以用ascii表示。python3中的二进制文件(如文本文件)统一采用字节码读写。

3.python2与python3字符串编码的区别
python默认编码

default encodings in Python are:
Python 2.x: ASCII
Python 3.x: UTF-8

A. python3默认使用的是str类型对字符串编码,默认使用bytes操作二进制数据流,两者不能混淆!!
B. Python3有两种表示字符序列的类型:bytes和str。前者的实例包含原始的8位值,后者的实例包含Unicode字符。
C. Python2也有两种表示字符序列的类型,分别叫做str和Unicode,与Python3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。

str(unicode)类型是基准!
要将str类型转化为bytes类型,使用encode()内置函数;反过来,使用decode()函数。
示例如下:

>>> s = "木又盛,你好!"
>>> type(s)

>>> t = s.encode("gbk")
>>> t
b'\xc4\xbe\xd3\xd6\xca\xa2\xa3\xac\xc4\xe3\xba\xc3\xa3\xa1'
>>> type(t)

>>> t.decode("gbk")
'木又盛,你好!'

4.len()函数
要计算str包含多少个字符,可以用len()函数

>>> len('ABC')
3
>>> len('中文')
2

len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数

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

最后,还有一个疑问:网页的编码??

>>>import urllib.request
>>>respOnse= urllib.request.urlopen('http://www.baidu.com')
>>>html = response.read()
>>>type(html)
<class 'bytes'>

要正常显示的话,就要使用decode()方法了。


推荐阅读
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 前端Angular的Post导出Excel,内容全部乱码(不是文件名),而Get方式导出没问题 ... [详细]
  • Python3怎么获取文件属性
    这篇文章给大家分享的是有关Python3怎么获取文件属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。os.stat(path ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文介绍了如何将PPT格式转换成PDF,并推荐了一款高效的PPT转换成PDF转换器。该转换器利用最新的超线程技术核心和多核心CPU性能,提高了转换效率和转换质量。同时,该转换器具备万能转换模式,可以轻松实现不同类型、不同内容和不同排版的PPT文件的转换。用户可以通过下载链接获取该转换器。 ... [详细]
  • 转载处:http:www.cnblogs.comdarksirp3704198.html这里不讨论数学原理,只说明其实现和传输过程。我们先假定一个数据的发送方和一个数据的接收方(就叫小红和小 ... [详细]
author-avatar
mobiledu2502886217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有