咱们在写代码的时候常常会遇到乱码等问题,其实就是由于编码格式不正确,那咱们如今来简单看一下关于编码的相关知识python
计算机存储数据是用0、1存储的,为了存储英文字符等,因此出现了一个ASCII编码表,经过这个表就是把对应的英文转换对应为相应的0、1数据存储到计算机,可是英文只有26个字母,中文有6万多汉字,ASCII编码不够,因此根据须要就出现了unicode、utf-8等编码,实际能够理解为它们把全球的文字编码对应到计算机的0、1来存储识别。数组
ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示全部的大写和小写字母,数字 0 到 九、标点符号, 以及在美式英语中使用的特殊控制字符。其中:编码
Unicode是为了解决传统的字符编码的局限而产生的。对世界上大部分的文字系统进行了编码、整理,使电脑能够更方便的处理和展现文字。Unicode采用16位编码空间,每一个字符占2个字节。Unicode的实现方式称为Unicode转换格式spa
Unicode码扩展自ASCII字元集。在严格的ASCII中,每一个字元用7位元表示,或者电脑上广泛使用的每字元有8位元宽。而Unicode使用全16位元字元集。这使得Unicode可以表示世界上全部的书写语言中可能用於电脑通信的字元、象形文字和其余符号。code
不一样的编码方式会形成乱码问题,Unicode将世界上全部符号都归入其中。每个符号都给予一个编码,这样就就解决了乱码问题。Unicode如今的规模能够容纳100多万个符号,每一个符号的编码都不同,例如U+4E0A表示上,U+4E0B表示下,具体的符号对应表能够查看:http://www.chi2ko.com/tool/CJ...orm
UTF全称(Unicode Transformation Format),因此它是一种针对前面提到的Unicode的编码格式,常见的格式就是 UTF-8,还有 UTF-16, UTF-32。htm
UTF-8 其中的 8 表示的是 8 bit,即Unicode中每8位表示一个字符,UTF-16 和 UTF-32 相似,由于Unicode最多才21位,32位大于21位,因此 UTF-32 的格式就能够表示全部字符对应的Unicode码了,可是呢,32位也就是4字节,让每一个字符都占用4字节太费空间了,因此出现了UTF-8和UTF-16。
UTF-8 编码规则以下:blog
Unicode | bit | UTF-8 | byte |
---|---|---|---|
0x0000 - 0x007f | 0 - 7 | 0XXX XXXX | 1 |
0x0080 - 0x07ff | 8 - 11 | 110X XXXX 10XX XXXX | 2 |
0x0800 - 0xffff | 12 - 16 | 1110 XXXX 10XX XXXX 10XX XXXX | 3 |
0x1 0000 - 0x1f ffff | 17 - 21 | 1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX | 4 |
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时没法正确打印汉字,因此在读取中文时会报错。解决方法为在文件的开头加入 # -*- coding: UTF-8 -*-
或者#coding=utf-8
就好了。utf-8
咱们要记住写python程序的时候通常使用utf-8编码格式来存储编码格式,网页里面一样的也声明utf-8便可,utf-8是中文、英文、日文等全球文字均可以使用的编码格式,通用性很强。unicode
在Pycharm 中设置编码格式的步骤:File --> setting --> File Encodings