关于python的编解码(decode, encode)
admin
2023-07-31 01:44:51
0

总结总结,本文仅适用于python2.x

默认编码与开头声明

首先是开头的地方声明编码

# coding: utf8

这个东西的用处是声明文件编码为utf8(要写在前两行内),不然文件里如果有中文,比如

a = \'美丽\'
b = u\'美丽\'

中任何一种,运行前就会提示你SyntaxError,Non-ASCII character… 之类,因为python2.x的文件编码默认使用万恶的ascii
开头加上那句默认编码声明就会变成utf8,获取当前的默认编码

sys.getdefaultencoding()

unicode与utf8

在python中,使用unicode类型作为编码的基础类型,编解码要以其为中间形式过渡,即进行strunicode之间的转换。
解码然后再编码的过程,即str->unicode->str的过程。中间得到的叫做unicode对象

这里需要强调的是unicode是一种字符编码方法,是 “与存储无关的表示”,而utf8是一种以unicode进行编码的计算机二进制表示,或者说传输规范。gbkgb2312gb18030, utf8等属于不同的字符集,转换编码就是在它们中的任意两者间进行。

具体过程

具体的转换,比如直接将一个字符串encode成另一种字符集表示,注意此处是字符串,即typestr的,引号前没有加u前缀的

# coding: utf8

s=\'美丽\'
s.encode(\'gbk\')

则实际上会先以默认编码进行decode,即decode(\'ascii\'),开头声明了utf8,s的编码就是utf8,ascii解码不了utf8的字符会报错。那就改默认编码,

# coding: utf8
import sys

reload(sys)
sys.setdefaultencoding(\'utf-8\')

s=\'美丽\'
s.encode(\'gbk\')

这样把默认编码改成utf8,decode的时候就以默认编码utf8来进行,能够成功运行

或者decode时指定类型,

# coding: utf8
import sys

s=\'美丽\'
s.decode(\'utf8\').encode(\'gbk\')

对于typeunicode的,即加了u前缀的字符串,如上所说,直接encode即可

# coding: utf8
import sys

s = u\'美丽\'
s.encode(\'gbk\')

控制台的编码

这又是另一个让人困惑的地方——控制台的编码导致的乱码问题甚至是报错。一般个人用的电脑上控制台基本上都是utf8编码的,但运维的机器上基本全是ascii,print中文的时候就会有酸爽的问题。乱码问题一般发生在windows下面,因为那个编码的字符集很与众不同。所以当以正确方式编解码以后,还是出现问题,那问题很可能就出在控制台上了

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...