python中理解编码

Posted CherryYang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中理解编码相关的知识,希望对你有一定的参考价值。

ASCII 美国信息交换标准码 (American Standard Code for Information Interchange)

字符 编码后(十进制)
a 97
A 65
0 48

 

 

 

 

 

Unicode  万国码   一个字符 占4个字节  32bit位  

UTF-8  是针对Unicode的一种可变长度字符编码  对中文字符 一个字符占3个字节 24bit位

GBK  中国的 国标码  一个字符 占2个字节

 

python3 中的数据类型  布尔 bool 

          整型int  浮点型 float  复数complex (long型是python2中的)

                                     列表list  元组 tuple 字典dict   集合set  冻结集合 frozenset

           字符串str  字节型bytes  字节数组 bytearray

python  对str类型的数据 在内存中统一存储为unicode编码形式

pycharm 软件编辑界面下  默认使用utf-8 进行了编码转换 展示到屏幕

 

s1 = \'CH\'  # str类型的变量s1,接收两个英文字符,在内存中以unicode编码存储下来
b1 = bytes(\'CH\', "utf-8")  # bytes类型的变量b1,接收bytes类型字符串,在内存中以utf-8编码存储下来
b2 = b\'CH\'
print(s1)  # 打印后 表现形式为 CH 其编码方式为unicode
print(b1)  # 打印后 表现形式为 b\'CH\' 其编码方式为 utf-8
print(b2)  # 打印后 表现形式为 b\'CH\' 其编码方式为 utf-8
s2 = \'中国\'  # str类型的变量s2,接收两个两个中文字符,在内存中以unicode编码存储下来
b2 = bytes(\'中国\', "utf-8")  # 内置函数bytes()的作用 本质是对字符进行unicode编码到其它编码的转换编码
b3 = s2.encode("utf-8")
# b4 = b\'中国\'  # python3不支持 python2可以?
print(s2)  # 打印后 表现形式为 中国 其编码方式为unicode
print(b2)  # 打印后 表现形式为 b\'\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\' 其编码方式为 utf-8
print(b3)  # 打印后 表现形式为 b\'\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\' 其编码方式为 utf-8

 

s1 = "abc"
print(s1.encode("utf-8"))  # unicode编码  --> ust-8编码
s2 = "中国"
print(s2.encode("utf-8"))  # unicode编码  --> ust-8编码

b = b\'abc\'
s3 = b.decode("utf-8")  # ust-8编码  --> unicode编码
print(s3)
b = b\'\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\'
s4 = b.decode("utf-8")  # ust-8编码  --> unicode编码
print(s4)

 

 

s = \'alex\'
print("str类型:", s)
b1 = bytes(s, encoding=\'utf-8\')  # 针对unicode编码的str类型的字符串,在内存中生成新的 utf-8编码的 bytes类型的字符串
print("bytes类型:", b1)
# b1[0] = 65  # TypeError: \'bytes\' object does not support item assignment
b2 = bytearray(s, encoding=\'utf-8\')
print("改动前:", b2)
b2[0] = 65  # 可以将每个字节当成元素item,逐个改动, 即对内存中的内容按字节直接改变,内存中没有新增占用
print("改动后:", b2)

print("------------分割线-------------")
s1 = \'alex\'
print("原字符串", s1)
print("内存地址", id(s1))
s2 = s1.replace(\'a\', \'A\')  # 为实现改变,内存中 原字符串 + 新生成字符串
print("原字符串无变化", s1)
print("得到新字符串", s2)
print("内存地址", id(s2))
print("-------------------------")
View Code

 

以上是关于python中理解编码的主要内容,如果未能解决你的问题,请参考以下文章

使用凌空json数据的片段中的Recyclerview?

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

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

递进迭代敏捷

python字符串编码理解(转载)

使用非utf-8编码在Python中解析XML