Python乱码,编码,repr,encode,decode探究

#encoding:utf-8#用命令行执行s = ‘百度’print s # 输出环境为gbk,编码为utf-8,输出乱码print s.decode(‘utf-8’) # => 发现输出环境为gbk,自动转换print s.decode(‘utf-8’).encode(‘utf-8’) # 输出环境为gbk,编码为utf-8,输出乱码print s.decode(‘utf-8’).encode(‘gbk’) # 输出环境为gbk,编码为gbk,正常输出# s = 0xF21938274ABDS… 二进制内存# 把这些内存数据转化为可显示的字符串就是repr(s)的print结果,不可显示的字符变为如\x,# repr(s) 并非这些内存数据,也并非内存数据按char解释成可显示的字符。# repr(s) 的意义是 print repr(s)的到的结果,是内存数据按char解释成可现实的字符# 如设 s = 0x24 = ‘\n’, 则 print repr(s) => ‘\n’, repr(s)为’\\n’ (因为要显示\)## s 的内存数据按照一定编码解释,可以得到正确意义# 若s是按照utf-8编码的 ‘哈哈’,用utf-8解释就可以得到 ‘哈哈’ 的意义# 在python中把s按照 xyz 编码解释,就是 s.decode(xyz)# s.decode(xyz) 在python中得到一个变量,不关心它的内存表示,也许就是『数据+编码方式』# 无论在内存中如何表示,这个变量的抽象意义可以提取出,,我们就认为它是抽象的 ‘哈哈’# 一个解释后的字符串,可以转换其编码,就是意义不变,编码方式变,得到不同的二进制数据# cmd的输出环境为gbk,utf-8编码的二进制数据直接在cmd里print会得到乱码# 将utf-8编码的数据先用utf-8格式解码出意义,再将其编码为gbk二进制数据,在cmd输出正常# 将utf-8编码的数据先用utf-8格式解码出意义,直接输出,python会自动检测输出环境# 将知道意义的字符串按照输出环境自动解码# python中#encoding:xxx是说明在python代码按照什么格式解码# 一般不同的编码英文都相同可以识别# 而文件在编辑时是与编辑器交互,编辑时我们看到的是意义,编辑器使用一种编码保存代码意义# 代码意义被编辑器保存成二进制数据文件在存储器里# 代码文件被python解释器执行时,会查找其中#encoding:xxx,确定代码格式编码# 如果代码中声明的编码方式和文件保存的编码方式不同,除了英文字符,其他很可能出错# 以为python解释器用B编码去解释编辑器用A编码保存的意义# 一般来说中文的不同编码方式都不兼容,所以不同编码的解释会导致乱码# 通俗解释# 我们用来交流的都是语言的意义,不同编码相当于不同文字的书写,都是用来保存意义# 拿到一段文字,按英语语法解释就是将其用英语格式解码。python中decode# 心理想一段话,按中文写下来就是将其用中文编码保存。python中encode# 我们与输入输出交互的是意义,如果其输出不是乱码,表示意义交互成功,否则失败# 编码方式是不同软件 解释器,文件编辑器,cmd命令行 它们使用的语言。# 也就是我们要让这些软件成功的交流,在他们可能使用不同语言情况下。# 这样,我们把意义传给编辑器,编辑器用A语言书写,解释器就要用A语言阅读。# 而cmd输出需要用B语言,解释器就要把A语言的文字转化成意义,在转化成B语言给cmd# cmd拿到B语言的文字,可以翻译出它的意义,显示在屏幕上,也就是没有乱码的输出结果# 所以,上面的代码如果不在cmd在其他python IDE里执行,可能得到结果不同# 因为cmd会的是gbk "语言",而其他的python IDE可能直接会utf-8,那乱码出现的情况就不同

生命有限,努力无限

Python乱码,编码,repr,encode,decode探究

相关文章:

你感兴趣的文章:

标签云: