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,那乱码出现的情况就不同

时间: 2024-10-23 13:26:25

Python乱码,编码,repr,encode,decode探究的相关文章

python中编码和解码decode和encode的使用

python 在处理字符串时经常遇到编码错误,导致乱码,且python 2.x和 python 3.x之间有很大的不同,先在这里记录一下,以后整理; 转载 文章一篇: http://www.cnblogs.com/evening/archive/2012/04/19/2457440.html

关于Python字符编码encode和decode

(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 记得几天前,部门的一个小姑娘问我,怎么她Python打印出来的中文信息都乱码了?我走过去,略思一二,瞬间给她搞定,其实这是字符编码转换的问题.这时,我注意到小姑娘流露出一丝丝崇拜的眼神.所以我想,如果你连编码问题都搞不定,还怎么泡妞啊.可能一部分人也会进入这种误区,我以我小学生的水平,把我的理解结合网上的资料写下来. 注意:Python3默认编码是unicode:而Python2是ASCII码.Windows环境默认是g

Python编码介绍——encode和decode

在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下: # code: UTF-8 因为python 只检查 #.coding 和编码字符串,所以你可能回见到下面的声明方式,这是有些人为了美观等原因才这样写的: #-*- coding: UTF-8 -*- 常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换 GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码 ASC

python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')

python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8') 原文地址:https://www.cnblogs.com/zhaoyingjie/p/9133020.html

python 字符编码处理问题总结 彻底击碎乱码!

Python中经常遇到这样的字符编码问题,尤其在处理网页源码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in position 12-15: illegal multibyte... 下面以汉字'哈'来解释作示例解释所有的问题,汉字"哈"的各种编码如下: 1  UNICODE(UTF8-16): 0xC854 2  UTF-8: 0xE59388 3  GBK: 0xB9FE 除此之外还有如gb2312,

[Python函数]encode,decode

前言: 我们知道,计算机是以二进制为单位的,也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字,只有先变成0和1,计算机才会识别它的意思.这种数据和二进制的转换规则就是编码.计算机的发展中,有ASCII码,GBK,Unicode,utf-8编码.我们先从编码的发展史了解一下编码的进化过程. 编码发展史 美国人发明了计算机,用八位0和1的组合,一一对应英文中的字符,整出了一个表格,ASCII表. 计算机传入中国,中国地大物博,繁体字和简体字多,8位字节最多表示256个字符,满足不了,于是

转 Python——UnicodeEncodeError: 'ascii' codec can't encode/decode characters

转自: http://blog.csdn.net/zuyi532/article/details/8851316 我是写爬虫的时候遇到的问题,百度了一下,先贴解决方案: 在代码中加入: import sys reload(sys) sys.setdefaultencoding('utf8') 初学Python被编码格式搞的很头大,以下bug是遇到的编码问题之一: [BUG]UnicodeEncodeError: 'ascii' codec can't encode characters in p

【python】UnicodeEncodeError: 'ascii' codec can't encode/decode characters

解决方案在文件头插入 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8') [python]UnicodeEncodeError: 'ascii' codec can't encode/decode characters

python字符编码

1. 字符编码简介 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符) 后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 阶段二:为了满足中文,中国人定制了GBK GBK:2Bytes代表一个字符 为了满

【转载】不得不知道的Python字符串编码相关的知识

原文地址:http://www.cnblogs.com/Xjng/p/5093905.html 开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII character 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128),又例如显示乱码.由于之前不知道编码的原理,遇到这些情况,就只能不断的用各种编码decode和encode.....今天整理一个pyt