字符编码

转载https://www.cnblogs.com/hukey/p/9647291.html

1.编码:
ascii码: 不支持 中文 .python2使用的编码是
支持,英文,数字,符号
8位一个字节
gbk编码 国标:
支持: 中文,英文,数字,符号
英文16位
中文16位
unicode 万国码
支持:中文,英文,数字,符号
英文  32位,四个字节
中文  32位,四个字节
utf -8长度可变,的万国码最少用8位, python3使用的编码
英文 8位 一个字符
中文 24位 三个字节
python3中程序运行阶段使用的是uniconde码,显示的内容是bytes类型
传输和存储使用的byes
pycharm 存储使用的是utf8
1.编码.
汉字,一个汉字utf-8是3个字节
举例:
s = "中"
bs = s.encode("utf-8")
print(bs)
b'\xe4\xb8\xad
gbk,英文编码是ascii原样输出,汉字,一个汉字gbk是2个字节
s = "alex"
bs = s.encode("gbk")
print(bs)
b'alex'
2.解码,用什么编的码,就要用什么来解码
举例:都使用utf-8来,腾讯qq微信发的其实都是这些码,然后进行解码
编码:
s = "old广坤"
bs = s.encode("utf-8")
print(bs)
解码:
bs = b'old\xe5\xb9\xbf\ex5\x9d\xa4'
s = bs.decnde("utf-8")
print(s)

内存地址

字符编码

  这里主要描述以下三种编码方式:

  (1)ASCII

  (2)unicode

  (3)uft-8

  (4)gbk

 

ASCII 码

  在计算机内部,所有的信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此 8 个 二进制位就可以组合成 256 种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示 256种不同的状态,每一个状态对应一个符号,就是 256 个符号,从 00000000 到 11111111

  美国定制了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。

 

  一个字符用 1 个字节表示  1 byte = 8 bit

  ASCII 码只包含字母和英文中的特殊符号,不包括汉字;

 

unicode (万国码)

  世界上存在很多种不同的编码,同一个二进制数字可以被解释成不同的符号。因此,想要打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式打开就会出现乱码。如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 unicode 万国码的由来,这是一种所有符号的编码。

 

  字母:

    一个字母等于 4 个 byte = 32 bit

  汉字:

    一个字母等于 4 个 byte = 32 bit

  

1. unicode 的问题

  需要注意的是, unicode 只是一个字符集,它规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

  (1)如何才能区分 unicode 和 ASCII ? 计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?

  (2)英文在 ASCII 码中,只需要一个字节表示就够了,如果采用 unicode 统一规定,每个符号用三个或四个字符表示,这对于存储来说是极大的浪费,文本文件的大小胡因此大出二三倍。

 

UTF-8 

  互联网的普及,强烈要求出现一种统一的编码方式。utf-8 就是在互联网上使用最广的一种 unicode 的实现方式。

  字母:

    一个字母等于 2 byte = 8 bit

  汉字:

    一个中文等于 3 byte = 24 bit

 

GBK

  包含全部中文字符,utf-8则包含全世界所有国家需要用到的字符;

  字母:

    一个字母 1 byte = 8 bit

  汉字:

    一个汉字 2 byte = 16 bit

 

 =、==、is 三者的使用说明

1. = 赋值

例子:

1

2

s1 = 'hkey'

s2 = 'xiaofei'

 

2. ==  比较值是否相等

1

2

3

4

print1 == 2)

 

# 执行结果:

# False

 

3. is 比较内存地址

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

s1 = 6

s2 = 6

 

print(s1 is s2)

 

# 执行结果:

# True

 

s11 = 'adfadsasdfasdff'

s22 = 'adfadsasdfasdff1'

 

print(s11 is s22)

 

# 执行结果:

# False

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章