Python3.7之字符编码
一、编码与解码
1.编码
str.encode(encoding='UTF-8',errors='strict'),返回编码之后的字节串。
s = '你好世界'
s_utf8 = s.encode('utf-8')
print(s_utf8)
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
其中,b' '代表bytes类型字节串,以16进制形式表示 ,2个16进制数构成一个byte。
py3 文件的默认编码是utf-8,py2文件的默认编码是ASCII码,pycharm 默认加载文件都是用utf-8编码。
2.解码
str.decode(encoding='UTF-8',errors='strict'),返回解码之后的字符串。
print(s_utf8.decode('utf-8'))
你好世界
二、编码转换
Windows默认文件编码方式为gbk,mac与Linux默认文件编码方式为utf-8,在用记事本打开不同系统下的文件时,会出现乱码,故要进行编码转换。
编码转换方式: gbk --->unicode --> utf-8
Unicode为万国码,与所有编码方式之间均有映射关系,utf-8为Unicode的简化版本。其中gbk用两个字节表示一个中文字符,Unicode用三个字节表示一个中文字符。
1.用pycharm进行编码转换
with open(file='你好世界.txt', mode='r', encoding='gbk') as f:
s = f.read()
print(s)
print(type(s))
你好世界
<class 'str'>
2.用编程方式进行编码转换
转换原则:gbk(bytes字节)--->Unicode(str) --->utf-8(bytes字节)
以二进制形式打开(读取)文件的操作:
with open(file='你好世界.txt', mode='rb') as f:
s = f.read()
print(s)
print(type(s))
b'\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7'
<class 'bytes'>
编码转换操作
f = open(file='你好世界.txt', mode='rb')
s = f.read()
f.close()
s_unicode = s.decode('gbk') # 转成Unicode
s_utf8 = s_unicode.encode('utf-8') # 编码成utf-8
with open(file='你好世界.txt', mode='wb') as f:
f.write(s_utf8)