一、字符串编码和类型

任何编码格式的字符串,都可以和Unicode互相转换。

gbk -> utf8

# 将字符串按指定格式进行解码,返回Unicode字符串
unicode_str = gbk_str.decode("gbk")

# Unicode字符串按指定格式进行编码,返回对应编码字符串
utf8_str = unicode_str.encode("utf-8")

爬虫获取网页字符串的编码格式,取决于网页的charset=gbk

Python2: 编码和类型
str 类型:非Unicode编码字符串
unicode 类型:Unicode编码字符串

Python3: 编码和类型
str 类型:Unicode编码字符串
bytes 类型:非Unicode编码字符串和二进制数据,前面有个'b'

# 将字符串按指定格式进行解码,返回Unicode字符串
unicode_str = gbk_str.decode("gbk")

# Unicode字符串按指定格式进行编码,返回对应编码字符串
utf8_str = unicode_str.encode("utf-8")

二、解释器编码(Linux) :默认编码转换,用于文件写入

>>> import sys
>>> sys.getdefaultencoding()

Python2 :ascii 只能帮忙转换字母、数字
Python3 :utf-8 默认转为utf-8

字符串 utf-8 存为 utf-8文件 (OK)
字符串 unicode,转为utf-8, 存为 utf-8文件 (OK)

字符串 unicode,如果不转码,解释器会尝试转为utf-8,存为utf-8文件 (OK)

当字符串是包含中文的Unicode时,Python2不能直接写入文件,会报错

如果遇到字符串和需要保存的文件不一致:
1. 自己手动转为匹配的编码格式
2. 让解释器帮忙转换,Python2有可能做导致 UnicodeEncodeError

在程序员没有转换编码的前提下:
Python3的解释器:可以将Unicode 转为utf-8 写入Linux文件下(解释器编码UTF-8)
Python2的解释器:不能将 Unicode 写入到Linux文件下(解释器编码ASCII)

Python2下处理编码的万能钥匙:

将Python2的解释器编码ascii 改为 utf-8 (解释器环境等于Python3)
>>> import sys
>>> reload(sys)
>>> sys.setdefaultencoding("utf-8")

三、终端编码(Linux)
Python2 : utf-8

Python3 : Unicode

四、保存的文件编码
只和操作系统有关,Linux是utf-8 Windows GBK

Python3:

with open("xxx.txt", "w", encoding="utf-8") as f:
f.write(xxxx)

Python2 ;没有encoding参数

>>> with open("xxx.txt", "w") as f:
... f.write("你好".decode("utf-8"))
...

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec cant encode characters in position 0-1: ordinal not in range(128)

>>> with codecs.open("xxx.txt", "w", encoding="utf-8") as f:
... f.write("你好".decode("utf-8"))
...

五、代码文件的编码格式
Python2: ascii #coding:utf-8
Python3: utf-8

Google :PageRank(根据网页流量排名)
Baidu :超链分析(Robin Li),竞价排名(给钱多排名靠前)

不要看一下午视频,只看不清楚的地方(11:55)
“我亦无他,唯手熟尔。”
照着抄代码 - 默写代码 - 改写代码 - 自己写出自己的代码

Python自带模块:
/usr/lib/python2.7

Python第三方模块(pip install xxx)
/usr/local/lib/python2.7/site-packages/

Python2和Python3的字符串编码和类型的更多相关文章

  1. 一篇文章助你理解Python3中字符串编码问题

    前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解 ...

  2. Python2与python3中字符串的区别

    Python2 在python中包含两种字符串类型:str和unicode,str并不是完全意义上的字符串,其实是由unicode经过编码(encode)后的字节组成的字节字符串,而unicode则是 ...

  3. python2和python3中的编码问题

    开始拾起python,准备使用python3, 造轮子的过程中遇到了编码的问题,又看了一下python3和python2相比变化的部分. 首先说个概念: unicode:在本文中表示用4byte表示的 ...

  4. python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)

    python3 解释器默认编码为Unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节串,字节码通过解码成为字符串. encode:str-->byte ...

  5. python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)

    一直以来我其实一直对python的编码弄得非常晕,能正常编码,也能处理一些情况.但是始终不明白有些问题究竟为何出,原因是什么,为什么要这样用. 今天晚上正好好好研究了一番解答了自己心中的困惑. Q:p ...

  6. Python2和Python3中的字符串编码问题解决

    Python2和Python3在字符串编码上是有明显的区别. 在Python2中,字符串无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字 ...

  7. Python的字符串编码

    本文用实验详细地演示了Python2和Python3在字符串编码上的区别. 在Python2中,字符串字面量对应于8位的字符或面向字节编码的字节字面量.这些字符串的一个重要限制是它们无法完全地支持国际 ...

  8. Python2与Python3字符编码的区别

    目录 字符编码应用之Python(掌握) 执行Python程序的三个阶段 Python2与Python3字符串类型的区别(了解) Python2 str类型 Unicode类型 Python3 字符编 ...

  9. 一篇文章助你理解Python2中字符串编码问题

    前几天给大家介绍了unicode编码和utf-8编码的理论知识,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系.下面在Python2环境中进行代码演示,分别Wind ...

随机推荐

  1. linux网络编程之posix消息队列

    在前面已经学习了System v相关的IPC,今天起学习posix相关的IPC,关于这两者的内容区别,简单回顾一下: 而今天先学习posix的消息队列,下面开始: 接下来则编写程序来创建一个posix ...

  2. linux网络编程之system v消息队列(二)

    今天继续学习system v消息队列,主要是学习两个函数的使用,开始进入正题: 下面则开始用代码来使用一下该发送函数: 在运行之前,先查看一下1234消息队列是否已经创建: 用上次编写的查看消息队列状 ...

  3. TCP三次握手,四次回收的每一步的解释

    三次握手 第一次握手:主机A发送位码为syn=1,随机产生seq number=10001的数据包到服务器,主机B由SYN=1知道,A要求建立联机,此时状态为SYN_SENT: 第二次握手:主机B收到 ...

  4. 服务如何配置JVM

    为了使JVM的资源利用更合理,往往需要手动设置JVM的初始值.下面将详细介绍不同环境下的JVM配置. 1.如果是应用程序,则:java -Xms800m -Xmx800m 你的类名 java -Xms ...

  5. linux 忘记root密码怎么处理。

    这个是不少人纠结的地方.一台服务器,太久没使用,然后又没有一个文件txt,excel记录那些密码相关的东西.所以导致很多信息忘记了. 参考文章:https://blog.csdn.net/cranky ...

  6. Windows 创建Raid

    Windows 常见raid有0.1和5,以下操作在虚拟机下模拟,学会这招在自己电脑做个raid也未尝不可啊~ 一.RAID 0 创建: 添加两块硬盘,联机并初始化(2T以下选MBR,以上选GPT) ...

  7. JavaScript是如何工作的02:深入V8引擎&编写优化代码的5个技巧

    概述 JavaScript引擎是执行 JavaScript 代码的程序或解释器.JavaScript引擎可以实现为标准解释器,或者以某种形式将JavaScript编译为字节码的即时编译器. 以为实现J ...

  8. PHP流程控制之if语句多种嵌套

    王思总同学我们在最开始的故事中讲到了他有两个秘书:一个生活秘书.一个工作秘书. 王思总同学在出行和项目中也是极度有计划性.他给自己的生活秘书和工作秘书分别指派了出差的行程:大理石平台支架 生活上: 先 ...

  9. <load-on-startup>1</load-on-startup>的作用

    1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法).2)它的值必须是一个整数,表示servlet应该被载入的顺序3)当值为0或者大 ...

  10. 二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web

    web proxy web1 web2   1.安装部署Tomcat服务器 web1 1.1 使用RPM安装JDK环境 ]# yum -y install java-1.8.0-openjdk ]# ...