资讯专栏INFORMATION COLUMN

关于python的编解码(decode, encode)

shusen / 930人阅读

摘要:,,等属于不同的字符集,转换编码就是在它们中的任意两者间进行。一般个人用的电脑上控制台基本上都是编码的,但运维的机器上基本全是,中文的时候就会有酸爽的问题。

总结总结,本文仅适用于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下面,因为那个编码的字符集很与众不同。所以当以正确方式编解码以后,还是出现问题,那问题很可能就出在控制台上了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37662.html

相关文章

  • JavaScript中三种GBK/GB2312编解码方案对比

    摘要:笔者在编码详解与中编码实践一文中介绍了中编码相关的基础知识,其中没有介绍纯粹的编解码方案,笔者后来根据网上的代码完善了下这个库,并且对中三种不同的编解码方案进行了比较。 Isomorphic Urlencode Here is English Version For README 笔者在URL编码详解与DOM中GBK编码实践一文中介绍了JavaScript中URL编码相关的基础知识,其...

    BlackFlagBin 评论0 收藏0
  • Python中的文本和字节序列

    摘要:计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即个字节等于个比特。需要注意协议规定网络字节序为大端字节序。以元组形式返回全部分组截获的字符串。返回指定的组截获的子串在中的结束索引子串最后一个字符的索引。 导语:本文章记录了本人在学习Python基础之数据结构篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本章重点: 1、了解字符字节等概...

    AlphaWallet 评论0 收藏0
  • Python学习之路23-文本和字节序列

    摘要:字符编码表,码位码元将编码字符集中的码位转换成有限比特长度的整型值的序列。字符编码方案,码元序列化也称为常说的序列化。每个字节里的二进制数就是字节序列。另一个情况则是压缩字节序列的值,如或进程长度编码等无损压缩技术。 《流畅的Python》笔记。本篇主要讲述不同编码之间的转换问题,比较繁杂,如果平时处理文本不多,或者语言比较单一,没有多语言文本处理的需求,则可以略过此篇。 1. 前言 ...

    anRui 评论0 收藏0
  • Netty(三) 什么是 TCP 拆、粘包?如何解决?

    摘要:是一个面向字节流的协议,它是性质是流式的,所以它并没有分段。可基于分隔符解决。编解码的主要目的就是为了可以编码成字节流用于在网络中传输持久化存储。 showImg(https://segmentfault.com/img/remote/1460000015895049); 前言 记得前段时间我们生产上的一个网关出现了故障。 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送...

    YanceyOfficial 评论0 收藏0
  • 关于解决Python乱码问题的终极解决方案 (TL;DR)

    摘要:关于解决乱码问题的终极解决方案有个特别好玩的现象,当我们为了编码头疼的时候,几乎搜索到所有的文章都会先发一通牢骚。另外,关于的乱码问题,又是一个新的较长篇章。 关于解决Python乱码问题的终极解决方案 (TL;DR) showImg(https://segmentfault.com/img/remote/1460000013229494?w=809&h=184); 有个特别好玩的现象...

    Lemon_95 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<