首先我们来讲一下大家经常看到#-*- coding: utf-8 -*-这行代码,这行代码只是确定你当前编辑的.py文件的编码格式,对文件中变量的编码没有任何作用,对你读写的文件的编码也没有任何帮助。下面给大家总结一下Python中变量的编码:
python2
两种表示字符序列的类型str(字符的原始8位二进制值)、Unicode(Unicode字符)
str->Unicode(decode)
Unicode->str(encode)
python3
两种表示字符序列的类型bytes(字符的原始8位二进制值)、str(Unicode字符)
bytes->str(decode)
str->bytes(encode)
(1)python默认编码是Unicode。
(2)所以python的编码与解码的逻辑是转默认编码为decode(解码),转其他字符编码为encode(编码)。
例如(Python3):
下面的字符串变量s初始编码为Unicode,类型为str;输出正常;
将其s.encode('utf-8)后编码为字符‘utf-8’编码的原始8位值,类型为bytes;
最后s.encode('utf-8).decode('utf-8')编码为‘utf-8’的Unicode字符,类型为str。
代码:
输出:
提示:在你使用python中的字符串、dict、list等变量时,记住这些变量中的中文字符编码都是Unicode,当你要向文件中写入这些变量时要考虑到文件的编码格式,将你的python变量按照上面的规则转成与文件一致的编码再写入。