1. ASCII是最早的字符集,总共包含127个字符,因为是美国人发明的,127个够他们用了。

2. GBK是ASCII的扩展集,ASCII使用一个字节,即8个二进制位,来表征英文字母和一些符号,一个字节可以最多表示2的8次方即256个字符。前127个被称为ASCII字符集,后续在ASCII的基础上进行扩展,将剩余的127个用来表征汉字,但汉字太多,所以不得不在必要时使用2个字符来表示更多的汉字,被称为GB2312字符集,后来仍然不够,又进一步扩展成GBK字符集。所以在此字符集中,英文占一个字节,汉字则占两个字节。

3. UNICODE也是字符集,包含了世界上所有民族的所有文字,因其一律使用两个字符来表示字符。其同时还有备用方案,即使用4个字节来表示字符,总共可容纳上亿的字符。

4. 由于互联网的出现,UNICODE字符集的传输出现了问题,像英文字符本来需要一个字节就可以保存,如果强行用两个甚至三个四个字节来表示,传输的内容将成倍的增加,这是无法接受的,一定要解决。因此也就带来了UTF-8。

5. UTF-8的意思即以每次传输8bits的形式来进行信息传递。如果一个字节能传输完,就传输一个字节,一个字节不够的,再用更多的字节来表示,下图为UNICODE与UTF-8的对应关系。

Unicode符号范围(十六进制) UTF-8编码方式(二进制)
起始 终止        
0000 0000 0000 007F 0xxxxxxx      
0000 0080 0000 07FF 110xxxxx 11110xxx    
0000 0800 0000 FFFF 1110xxxx 11110xxx 11110xxx  
0001 0000 0010 FFFF 11110xxx 11110xxx 11110xxx 11110xxx

因此,这样就解决了4中提到的问题。

以上内容与python的关系:

1. python3的默认编码方式是unicode。

2. encode与decode方法,如何区分?可以理解为unicode是标准的普通话,如果要改成gbk或者utf-8,就需要encode编码(加密),反之则是decode解码(解密)。

3. python3中正常创建的字符的储存方式是unicode,已经是标准的普通话了,无法再解密了,所以如果对一个字符串使用decode方法会提示 AttributeError: 'str' object has no attribute 'decode'。

4. python3中创建字符串,前面加u代表使用unicode字符集,python3的默认字符集已经是unicode,所以已经不需要加u。

5. python3中创建字符串,前面加b代表使用ASCII字符集,只能创建ASCII字符集中存在的字符,中文字符前加b会报错。

6. python3中处理带有'\x'的字符串,<string>.encode('raw_unicode_escape').decode('utf8')。

下图为python2环境,交互式界面。

Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> s='我们'
>>> b=u'我们'
>>> s
'\xe6\x88\x91\xe4\xbb\xac'
>>> b
u'\u6211\u4eec'
>>> print s
我们
>>> print b
我们
>>>

下图为使用python2执行test.py文件。

#! /usr/bin/env python
s = '匆匆'
print(s)

输出结果为:

File "./test.py", line 2SyntaxError: Non-ASCII character '\xe5' in file ./test.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

添加编码即可:

#! /usr/bin/env python
# -*- encoding: utf-8 -*-
s = '匆匆'
print(s)

python3 中的编码问题 unicode, utf-8, gbk, ascii相关推荐

  1. python3中字符串编码常见种类_Python基础篇—标准数据类型—String字符串编码问题...

    我要开始写String编码问题了...脑壳疼.. 在String字符串的第一篇末尾有留一个坑,就是关于中文字符串编码.整个编码的故事说起来都是很费劲的,我也只能把我所知道的梳理整理一下,在日常敲码过程 ...

  2. python3中的编码与解码

    首先,为什么要编码? 我们知道,计算机只能存储二进制串001100011.... 如果要计算机存储一个数字7,计算机可以用00000111来表示 如果要存储'a'这个字符呢?肯定也用一个二进制串来表示 ...

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

    前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解 ...

  4. python3中编解码、进制、字节、bytes及爬虫中经常遇到的编码问题的总结

    摘要 内容可能有些繁杂,我尽量排版清晰,描述通俗易懂,不说为了别人,后期我自己也要看的. 内容是我查阅诸多资料汇总的,如有不对之处,欢迎告知. 侵删 首先说一下:ASCII Unicode UTF-8 ...

  5. 关于 Python2 和 Python3 中的 Unicode 问题。

    写在之前 字符编码问题几乎是会跟随我们整个编程生涯的一大魔障,一不小心各种玄学的问题就会接踵而至,防不胜防,尤其是对初学者来说,碰到编码问题简直是就是加快了踏上从入门到放弃的传送带. 鉴于我公众号的读 ...

  6. 解决Python3中的中文字符编码的问题-亲测有效

    解决Python3中的中文字符编码的问题 一.原理篇: Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等.这篇文章主要介绍了Python3中的解决中文字符编 ...

  7. 中文在unicode中的编码范围

    喜欢古典小说的 可以关注  头条号 古典小说  公众号 古典小说网 喜欢编程的     可以关注 头条号 讨厌编程 以前写过一篇贴子是写中文在unicode中的编码范围unicode中文范围,但写的不 ...

  8. 【Python笔记】Python 中的编码与解码

    本文记录 Python2.x 和 Python3.x 中关于编码和解码的问题. 文章目录 1. 一些基本的概念 2. 编码格式 3. 编码和解码 4. Python3 的默认编码 1. 一些基本的概念 ...

  9. python3中unicode怎么写_详解python3中ascii与Unicode使用

    这篇文章主要为大家详解python3中ascii与Unicode使用的相关资料,需要的朋友可以参考下# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unic ...

最新文章

  1. OpenGL学习笔记3 —— 绘制3D物体、鼠标交互、反向变换
  2. libssh 认证绕过漏洞(cve-2018-10933)分析
  3. [安卓基础] 006.打开另一个Activity
  4. 神策数据张何津:构建银行数字化运营体系,赋能业态新发展
  5. Ajax/REST 第1部分
  6. 如何处理SAP HANA Web-Based Development Workbench的403 Forbidden错误
  7. Node.js: 如何退出node命令或者node server
  8. Windows Phone Local Database Schema Upgrade Part1 - Adding new columns
  9. [CF55D]Beautiful Number 题解
  10. python marshal 对象序列化和反序列化
  11. 西门子G120C变频器中的参考速度+转速给定原理分析
  12. 「 强烈推荐」程序员必备14款GIF制作的工具
  13. 《虎胆龙威4_终极警探4》
  14. ERP业务流程优化设计之思想和原则
  15. php必应壁纸 分辨率,必应壁纸php获取接口
  16. 区块如何防篡改_一种区块链防篡改技术的优化方法与流程
  17. iOS获取当前网络连接状态WiFi、5G、4G、3G、2G
  18. UI设计 调色板的应用
  19. 互联网卷王花落谁家?
  20. 一行命令aigc stable-diffusion 文本生成图片(动漫,艺术图,涩图,成人) 快速部署体验,微信端,小程序

热门文章

  1. 5G 在地空通信网络中的需求
  2. Ansible — 示例与最佳实践
  3. phantomjs学习
  4. asp.net core选项配置的研究
  5. Spring思维导图,让Spring不再难懂(aop篇)
  6. (zhuan) Where can I start with Deep Learning?
  7. java第二天_进制转换原理和补码存储方式作业
  8. 【Swift】UITableViewCell 中 TTTAttributedLabel 超链接无法点击的问题
  9. 构造函数调用虚函数先从子类搜索同名函数
  10. 硬回车与软回车[转]