python3与python2的编码问题
在讲这个问题之前,我们先说说unicode的工作原理。unicode包含了跟全球所有国家编码的映射关系,就是不管你用哪个国家的编码,unicode都能找到它在unicode中的编码。那么无论你用什么编码储存数据,只要这台电脑的系统支持unicode,那么你把数据放到内存里读,系统就会用unicode把你的编码解出来。现在所有的系统和编程语言都默认支持unicode。
下图是unicode的关系映射,其包含了跟全球所有国家编码的关系映射:
utf-8是unicode的一种优化,utf-8在英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个。值得注意的是:utf-8在进行内存储存时还是用的unicode编码,在文件储存中用的才是utf-8编码。原因如下:
下面进入正题:
phython3默认编码是utf-8, 内存里(也就是字符串) 是编码是unicode,即使声明了某种编码,在内存里还是unicode。
python2文件默认编码是ASCII,字符串默认也是ASCII,但是如果文件头声明了某种编码,那字符串编码就是那个编码。但是python2有一个问题,就是如果你想写中文,你的文件头声明了utf-8,python2的解释器会用你声明的编码去给你解码,加载到内存后也是用utf-8给你解码,而不是unicode!这就意味着,你用windows(中文版windwos默认编码是gbk)去执行的话就会出现乱码。因为在windows上只有2种情况 ,你的windows上显示才不会乱:
- 字符串以GBK格式显示
- 字符串是unicode编码
为什么在内存中用utf-8会出现乱码,用unicode就不会呢?原因如下:
utf-8虽然压缩了存储空间,但是如果在内存中存储,使用utf-8却由于它的长度不固定,带来了很大的不便,使得在内存处理字符变得复杂。应对这个问题的解决策略是:在内存中存储字符时还是使用unicode编码,因为unicode编码的长度固定,处理起来很方便。而在文件的存储中,则使用utf-8编码,可以压缩内存,节省空间。这里一般有个自动转换的机制,即从文件中读取utf-8编码到内存时,会自动转换为unicode编码,而从内存中将字符保存到文件时,则自动转换为utf-8编码。
解决办法就是用decode和 encode
什么是decode和encode:
另外,在python2里unicode是一个单独的类型。
参考:https://www.cnblogs.com/alex3714/articles/7550940.html
转载于:https://www.cnblogs.com/lshedward/p/9922939.html
python3与python2的编码问题相关推荐
- 纠结的Python2.7编码与os.walk()函数的目录参数
Python3与Python2.x系列的编码处理(类型,文件等)有所不同,具体这里就不再介绍了,网上有很多相关文章. 这里分享一个纠结了非常久的问题(因为一开始没特别注意函数参数的编码问题,所以浪费了 ...
- python2默认编码_解决Python2.x编码之殇
Python编码问题一直困扰了我许久,之前有过一些总结,但并不系统,比较凌乱.当然python2.x编码问题本身,便是剪不断理还乱.本篇将系统介绍python2.x编程中会遇到的一些编码问题,并给出解 ...
- python3默认的代码编码是什么-Python3 到底什么是字符编码
我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode是什么啊, U ...
- python2字符串编码方式_一、基础部分-2.字符串编码
一.字符编码历史 1. ASCII 美国人搞了个ASCII码表,把123abcABC%$#(数字.字母.特殊符号) ,全部用10进制的数字表示.例如数字65,代表着"A" ,ASC ...
- map python2 python3 兼容,Python2与Python3兼容
Python2与Python3兼容 python3写的代码如何也能在pyhon2上跑?请无论如何加上这一句,python3没有啥影响 from __future__ import absolute_i ...
- Python2中编码错误---éç»äººè¡¨ç®çé¿å ååè¶(æå格式转化为UTF-8...
Python2中编码错误---éç»äººè¡¨ç®çé¿å ååè¶(æå格式转化为UTF-8 在python2的使用中,总会遇到各种各样的编码问题,这也是使用Python2最头疼的一件事情,幸 ...
- python3对比python2的更新点
python3对比python2的更新点: Python2官方基础模块:urllib2 第三方功能包:requests python3中urllib库和urilib2库合并成了urllib库. 其中u ...
- python中3or5什么意思_示例详解Python3 or Python2 两者之间的差异
每门编程语言在发布更新之后,主要版本之间都会发生很大的变化. 在本文中,Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异,以帮助说明语言的变化. 本 ...
- python3.82版本安装_CentOS7下安装Python3和Python2并存
(一)简述 刚安装的centos7.4版本默认是安装Python2.7,由于一些命令需要使用的原因,比如yum等,使用的是2.7.5版本的,由于现在很多库包括django都是使用Python3, 因此 ...
最新文章
- Selenium2Lib库之输入常用关键字实战
- CentOS中安装mysql
- 如何判断Socket连接失效
- bool类型0和1真假_MySQL整理5—数据类型和运算符
- 华为的数字化转型与数据治理
- 新功能:阿里云负载均衡SLB支持HTTP/HTTPS超时时间自定义功能
- 蚂蚁集团2021反诈骗治理报告:“注销校园贷”类诈骗资损降85%
- 95-847-042-源码-Netty-NettyServer创建
- 删除此条访问记录对方还能看见吗_[转]到底什么是事务啊,学废了吗?
- 看剧流畅还省电?视频类应用预缓存策略功耗评测详解
- flex弹性布局学习总结
- Scripting for Testers 测试人员脚本编程教程 Lynda课程中文字幕
- 土壤质地标准转换程序Java MVC模式
- 力扣(Leetcode)633 平方数之和
- vue实现websoket即时通讯
- (logN)²是O(N)的
- 火水未濟 (易經大意 韓長庚)
- Android APP memory用量如何回收
- MySQL binlog存储格式笔记
- 已经安装了 AccessDatabaseEngine.exe,还是报错
热门文章
- mysql 5.7 修改密码_又忘记密码啦?教你几种更改密码的方式
- python编程基础知识点上的问题_python编程入门之二:必备基础知识
- 用Spark实现简单的单词统计
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 一张图搞定iOS学习路线
- 数字建模matlab,Matlab基础及数学建模.ppt
- AMI:加密的机器映像。卷
- vue2.0实现底部导航切换效果
- Node.js 添加 C/C++ Addon
- C# .net中cookie值为中文时的乱码解决方法