彩虹然

rainbow-ran

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)
posted @ 2020-01-16 16:07  彩虹然  阅读(1706)  评论(0编辑  收藏  举报