第三篇:python基础之编码问题
python基础之编码问题
python基础之编码问题
本节内容
- 字符串编码问题由来
- 字符串编码解决方案
1.字符串编码问题由来
由于字符串编码是从ascii--->unicode--->utf-8(utf-16和utf-32等)演变过来的,再加上类似于中国的gbk编码等,这些编码互相之间并不兼容,所以编写的软件实现跨语言平台运行就会出现字符乱码问题。。。
须知内容如下:
- 在python2默认编码是ASCII, python3里默认是utf-8(文件编码默认是utf-8,字符串编码默认是unicode)
- unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-8就是unicode
- 在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
2.字符串编码解决方案
首先,需要明白一点,unicode编码兼容所有编码格式,unicode编码在各种不同编码转换之间充当一个中间桥梁的角色,假如ascii编码要想转换成gbk编码,那就必须先解码,转换成unicode编码,然后再重新编码成gbk编码才算完成了整个过程。从其他编码转换成unicode编码的过程叫做解码(decode),从unicode编码转换成其他编码的过程叫做编码(encode)。PS:utf-8编码默认不兼容gbk编码,需要转换成unicode编码才能兼容gbk编码。
涉及到编码解码方式可以参照如下图所示:
编码问题涉及到如下几个方面:
- 文件的编码格式
- 字符串的编码格式
- 输出字符串的终端编码格式
文件的编码格式和字符串的编码格式以及终端的编码格式一致才能正常的输出想要的字符串。
在python中进行转码的有两个函数,是encode()编码函数,以及decode()解码函数。其中encode函数中需要填上该字符串的源编码格式,decode函数中需要填上该字符串需要编码的字符串格式。测试代码如下,原编码格式是utf-8格式字符串:

1 s="特斯拉"
2 s_to_unicode=s.decode("utf-8")#解码成unicode编码格式
3 print(s)
4 print(s_to_unicode)
5 unicode_to_gbk=s_to_unicode.encode("gbk")#编码成gbk编码格式
6 print(unicode_to_gbk)
7 gbk_to_unicode=unicode_to_gbk.decode("gbk")#解码成unicode编码格式
8 print(gbk_to_unicode)
9 unicode_to_utf8=gbk_to_unicode.encode("utf-8")#编码成utf-8编码格式
10 print(unicode_to_utf8)

第三篇:python基础之编码问题的更多相关文章
- 【0728 | 预习】第三篇 Python基础
第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...
- 前端第三篇---前端基础之JavaScript
前端第三篇---前端基础之JavaScript 一.JavaScript概述 二.JavaScript的基础 三.词法分析 四.JavaScript的内置对象和方法 五.BOM对象 六.DOM对象 七 ...
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- python基础之编码问题
python基础之编码问题 本节内容 字符串编码问题由来 字符串编码解决方案 1.字符串编码问题由来 由于字符串编码是从ascii--->unicode--->utf-8(utf-16和u ...
- 进击python第三篇:基础
基础拾遗 序列解包 例: >>>x,y,z=1,2,3 >>>print x,y,z 1 2 3 交换变量也是没问题 >>>x,y=y,x > ...
- 第一篇:python基础
python基础 python基础 本节内容 python起源 python的发展史 为什么选择python3 第一个python程序 变量定义 表达式和运算符 用户输入 流程控制 判断 流程控制 ...
- 【Python】python基础语法 编码
编码 默认情况下,python以UTF-8编码,所有的字符串都是Unicode字符串,可以为代码定义不同的的编码. #coding:UTF-8 #OR #-*- coding:UTF-8 -*- p ...
- 【Python之路】第八篇--Python基础之网络编程
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- 【Python之路】第七篇--Python基础之面向对象及相关
面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查obj是否是类 cls 的对象 class Foo(objec ...
随机推荐
- 对rsync进行封装的shell脚本
抓取 #!/bin/bash . push.sh # 错误处理:尝试查找备份文件 function onError() { local errFile="err" local se ...
- ebook-nodej
http://www.nodebeginner.org/index-zh-cn.html https://about.pinterest.com/careers/engineering/#oFwkXf ...
- WINDOWS下简单操作SQLITE3
有测试操作的时候,还是很好的说~~~ 找个sqlite3.txt下载 sqlite3.exe db.sqlite3 SQLite version 3.7.13 2012-06-11 02:05:22 ...
- PYTHON文本处理指南之日志LOG解析
处理特定字段的内容,并指指定条件输出. 注意代码中用一个方法列表,并且将方法参数延后传递. GOOGLE作过PYTHON代码的水平,就是不一样呀. 希望能学到这种通用的技巧. 只是,英文PDF看起来有 ...
- ExecutorService介绍
转自: http://victorzhzh.iteye.com/blog/1010359 下面是excutor相关的类结果: ExecutorService接口继承了Executor接口,定义了一些生 ...
- KeilC51高级编程
第一节 绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括: CBYTE.XB ...
- Android开源项目发现--- 工具类数据库ORM篇(持续更新)
orm的db工具类,简化建表.查询.更新.插入.事务.索引的操作 1. greenDAO Android Sqlite orm的db工具类 项目地址:https://github.com/greenr ...
- Android listView scroll 恢复滚动位置
相信大家尝试过许多方法恢复滚动位置,本人也找了许多方法,唯有这个方法好用,下面把代码贴出来 声明两个变量 private int mPosition; private int lvChildTop; ...
- java学习面向对象之父子构造函数初始化
在之前讲到java面向对象继承的时候,我们只讲到了两个比较重要的知识点,一个是父子类当中有同名的成员变量,这个时候,我们引入了super这个关键字来区分这两个同名成员变量,除此之外,我们还讲到了父子同 ...
- bzoj2729
一看就知道是数学题,考虑插空法由于老师只有两人,所以先对老师进行插空这里考虑两种情况:1.两个老师站在同一处,即两个男生之间站了两个老师这时候需要一个女生站在两个老师之间,再对女生插空,根据乘法原理即 ...