一. 编码与解码
"""
英文字符 -----------unicode二进制(内存) ------>ASCII二进制(硬盘)
中文, 英文字符 ------unicode二进制(内存) ------>GBK二进制(硬盘)
日文, 英文字符 ------unicode二进制(内存) ------>Shift-JIS二进制(硬盘)
万国字符 -----------unicode二进制(内存) ------>utf-8二进制(硬盘)
编码 ---------------> 编码 ---------->
解码 <--------------- 解码 <----------
"""
二. 结论
"""
存不乱码: 用utf-8格式存入硬盘
取不乱码: 在存不乱的前提下, 采用和当初存数据时一样的编码格式
控制读文件到内存第2阶段不乱码: 加文件头#coding:文件当初存时候的编码
保证Python2第3阶段不乱码须指定unicode: 变量名 = u"字符串变量值", Python3不用
"""
三. 文件头格式
"""
#coding:gbk # 一定要首行,指定文件当初存的编码如utf-8,gbk,控制读文件到内存阶段不乱码
Python3默认utf-8, Python2默认用ASCII, 所以要加文件头#coding:
内存中编码格式都是unicode,但是Python2会再转成文件头中指定别的编码,故要加 u"字符串变量值"
"""
四. 编码
语法之数据类型角度: str ------> bytes
内存编码角度: unicode ------> gbk
x = "上" # <class 'str'>
res = x.encode("gbk") # 现为2阶段在内存中的unicode转成gbk
print(res, type(res)) # b'\xc9\xcf',<class 'bytes'>,\x指16进制
五. 解码
语法之数据类型角度: bytes ------> str
内存解码角度: gbk ------> unicode
xx = res.decode("gbk") # 2阶段在内存中将gbk解码成unicode,按当初存的编码格式解码
print(xx, type(xx)) # 上 <class 'str'>
网友评论