特别鸣谢:木芯工作室 、Ivan from Russia ---- 区别 python3 相对于 python2 多了一个括号,如果手动一个个修改的话,工作量比较大 习惯python3的写法就不愿意用...python2的语法规则。...碰巧碰到了一个大型的python2项目。...所以这时候py2to3就诞生了 py2to3简介 2to3的简单集合,主要实现目标:将一个python2项目全部转换为python3,所以现在就只有一个参数–目标项目的绝对路径(或者相对与main function...的相对路径) 转换方法 从python安装文件中找到这个脚本,路径如图所示: 复制这个脚本到你所需要转换的python文件的同一路径下: 右击项目文件,选择open in,再选择terminal
基本类型转换 python3与python2通用函数: int('123456',10) # 转换为指定进制的整数 hex(123456) # 整数转换为16进制串,转换后类型为字符串 bin(123)...# 整数转换为2进制串 oct(123) # 整数转换为8进制串 python2专用函数: 'abcd'.encode('hex') # 字符串转换为16进制串,对应字符的ascii码 '61626364...'.decode('hex') # ascii码转换为对应的字符串 特别注意:python3比python2多了个字节的数据类型,python3字节专用函数: # 字符串转字节 bytes('str',...encoding='utf8') 'str'.encode(encoding='utf8') # 字节转字符串 str(b'byte',encoding='utf8') b'str'.decode(encoding...中有encode('hex')函数可以快速将字符串转换为对应 ascii 码的16进制数,在 python3 中只有借助binascii才能实现类似功能!
我们在使用python处理中文字符串时总会遇到一些问题,特别是一些老项目需要用到python2,中文显示乱码,文件读写异常等问题时常发生。...在Python2中默认的编码是ASCII,不能识别中文字符,需要指定字符编码;在Python3中默认的编码是Unicode,可以识别中文字符;在计算节内存中,统一使用Unicode编码。...文本编辑从文件读取的UTF-8字符会被转为Unicode字符存在内存里,处理完后,要保存的时候再把Unicode转为UTF-8保存。这里面就有编码和解码的过程。我们先了解什么是编码和解码。...而在python3后,认为python2的方式太复杂了,每次还要自己转一下。所以将decode和encode作为参数放入了IO接口中,不需要手动指定编码解码了。...())在python2下运行在python3下运行在python2中ASCII码是不能显示中文的,我们可以设置代码使用utf8编码reload(sys)sys.setdefaultencoding('utf
: import sys """ python2中也有两种字符串,不过,python3中的str类在python2中名称为unicode,但是,python3中的bytes类在python2中名称为str...: """ 可以在str与bytes之间进行类型转换,str类包含一个encode方法,用于使用特定编码 将其转换为一个bytes。...: """ 与python3不同的是,python2会在文本字符串和字节字符串之间尝试进行隐式转换。...中,调用encode方法可以将任意类型的字符串转换为字节字符串,或使用decode将任意类型的字符串转换为文本字符串 在实际使用中,这容易使人迷惑并导致灾难,考虑下面的例子: 如下所示,下面这段代码报错了...,在第一个encode之后,已经将字符串按照utf-8格式转换为字节字符串,由于还有一个encode过程,首先会存在一个隐式解码过程,将字节字符串先解码为文本字符串, 这里将会使用默认的隐式转换方式,即
从python2转到python3的第一个问题就是字符串的问题,我花了些时间把我能想到的和字符串处理有关的东西都整理如下。...到gbk >>> c=b.decode("utf-8").encode("gbk") >>> c '\xd6\xd0\xce\xc4 1.3 python2中的unicode 在上面其实已经解除到了一些...unicode了,简单来说,unicode就是一种包容性很强的编码,如果你在一开始就将字符串定义成了unicode类型,那么在完成字符串处理之后,可以自行encode成任意的编码: >>> d=u'abc...\xffg\x00a\x00w\x00' unicode是一个比较基础的字符串类型,他可以encode成其他的字符串,所以在python3之后默认的字符串类型就变成了unicode,不在需要使用“u”去定义个...2、Python3中的字符串 有了上面的基础,不用花太多时间就能把python3中的字符串讲清楚。
: python2中也有两种字符串,不过,python3中的str类在python2中名称为unicode,但是,python3中的bytes类在python2中名称为str类。...: 可以在str与bytes之间进行类型转换,str类包含一个encode方法,用于使用特定编码将其转换为一个bytes。...: 与python3不同的是,python2会在文本字符串和字节字符串之间尝试进行隐式转换。...中,调用encode方法可以将任意类型的字符串转换为字节字符串,或使用decode将任意类型的字符串转换为文本字符串 在实际使用中,这容易使人迷惑并导致灾难,考虑下面的例子: 如下所示,下面这段代码报错了...,在第一个encode之后,已经将字符串按照utf-8格式转换为字节字符串,由于还有一个encode过程,首先会存在一个隐式解码过程,将字节字符串先解码为文本字符串, 这里将会使用默认的隐式转换方式,即
xb8\x80\xe7\xab\xa0 \xe7\xa7\xa6\xe7\xbe\xbd'} dup = json.dumps(dict ,ensure_ascii=False) print(dup) Python2...,字节码通过解码转换为字符串: str--->(encode)--->bytes,bytes--->(decode)--->str decode和encode详解 decode 解码,在已知字符串编码的情况下...,转码为unicode ,比如 s.decode('utf-8'),结果为unicode encode 编码,在已有unicode的情况下,转码为其它编码,比如 u.encode('utf-8'),结果为...对象 result = json.dumps(result, cls=MyEncoder, ensure_ascii=False, indent=4) # 转字典类型 result...{ "id": 1, "title": "\u7b2c\u4e00\u7ae0 \u79e6\u7fbd" } cls dict类型的数据(存在中文),在python2中是可以转化的,但是在
Unicode:统一码(又称万国码),它为每种语言中的每个字符设定了唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。...但是,如果在网络上传输或者保存到磁盘中,需要把 str 转换为字节类型,即为 byte 类型。...str1=str.encode('GBK') print(str1) 2.2 byte 转 str 称为解码的过程。...以下例子是 python3 中的用法,加 u 和不加 u 前缀的字符串是等价的,且都是 str 类型(在 python2 中字符串不加前缀和加前缀 b 字符串是等价的,都是 str 类型。...因此如果你的项目是 python2 要兼容 python3 的话,需要在项目中将字符串加前缀 b) print("abc") print(u"abc") print(b"abc") print(type
--- 如果不知道上面两点,加之python之前对编码处理的不好名声,就会陷入一个问题深坑中。 ..." == "\u4f60")得到的结果是True 关于第二条,那是python2的故事,在python3中默认的文件编码就是utf-8。...因此,在保存python 3的脚本时,请务必保存为utf-8。 关于第三条,那也是python2的故事,在python3中,字符串默认采用unicode编码。 ...关于第四条,最初我是参考 python3 把\u开头的unicode转中文,把str形态的unicode转中文 ,发现不能重现,后来当我用\\uXXXX时,就重现了这篇文章中描述的问题,因为\在python...为什么json.dumps处理过后的中文就变成了\uXXXX呢?
于是来了个大变革,Python3横空出世,不兼容Python2,Python3比Python2做了非常多的改进,其中一个就是终于把字符串变成了unicode,文件默认编码变成了utf-8,这意味着,只要用...: 如果代码点数值转ASCII字节一样) 如果代码点数值>=128,则将其转换为一个2个字节,3个字节或4个字节的序列,该序列的每个字节都在128到255...对于程序源代码文件的字符编码是由编辑器指定的,比如我们使用pycharm来编写Python程序时会指定文件编码为UTF-8,那么Python代码被保存到磁盘时就会被转换为UTF-8编码对应的字节(encode...当执行Python代码文件中的代码时,Python解释器在读取Python代码文件中的字节串之后,需要将其转换为UNICODE字符串(decode过程)之后才执行后续操作。 ?...4.总结 对于Python代码中避免遇到编码问题,一点小建议: 字符编码声明:在代码开头声明编码格式 使用codes的open函数处理文本文件 尽可能使用Unicode而不是str 尽可能使用Python3
1、首先在Windows操作系统下的Python2环境中进行演示,我们都知道Python2中的编码问题经常出现,需要通过编码(encode)和解码(decode)进行实现。...如果想要将str1顺利的转换为utf-8编码的话,则需要先将str1进行解码成unicode编码,再进行编码即可,此时得到的结果同str2转换的结果是一致的。 ?...当中文字符串使用ASCII编码进行解码之后,本身就报错了,后边的encode(‘utf-8’)根本就没有执行到。...关于Python2中字符串编码的问题,就先介绍到这里了,相信大家应该有了一个初步的认识了,下一篇文章将介绍Python3中字符串编码的问题。...最近天气转凉,希望大家及时保暖,多注意身体健康~~ --------- End ---------
由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!...因为 Unicode 包含它与所有国家编码的映射关系, 所有只需要把数据从硬盘读到内存里, 转成 Unicode 来显示就可以了。...因为到了内存里 python3 解释器把 utf-8 转成了 Unicode,而 python2 的默认编码是 ASCII ,py2 解释器仅以文件头声明的编码去解释这段代码, 加载到内存后,并不会主动转成...如何验证编码转对了呢?...str >>> s = '你好' >>> type(s) Python3 的变革 Python3 中终于把字符串的编码从 ASCII 改为了 Unicode ,并且把str和bytes
只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了 unicode----->encode-------...#补充: 浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器 如果服务端encode的编码格式是utf-8, 客户端内存中收到的也是utf-8编码的结果。...与python3的字符串类型又有所不同。...('gbk'))) # 很重要的一点是:看到python3中x.encode('gbk') 的结果\xc9\xcf正是python2中的str类型的值,而在python3是...bytes类型,在python2中则是str类型 于是我有一个大胆的推测:python2中的str类型就是python3的bytes类型,于是我查看python2的str()源码,发现 ?
字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念。...Python 的默认编码 Python2 的默认编码是 ascii,Python3 的默认编码是 utf-8,可以通过下面的方式获取: Python2 Python 2.7.11 (default, Feb...('utf-8') 方法: >>> '中文'.decode('utf-8') u'中文' 把 u’xxx’ 转换为 UTF-8 编码的 ‘xxx’ 用 encode('utf-8') 方法: >>> u...下面有两个常见的场景,我们最好牢牢记住: 在进行同时包含 str 类型和 unicode 类型的字符串操作时,Python2 一律都把 str 解码(decode)成 unicode 再运算,这时就很容易出现...在进行同时包含 str 类型和 unicode 类型的字符串操作时,Python2 一律都把 str 解码(decode)成 unicode 再运算。
下面在Python2环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解。...1、首先在Windows操作系统下的Python2环境中进行演示,我们都知道Python2中的编码问题经常出现,需要通过编码(encode)和解码(decode)进行实现。...如果想要将str1顺利的转换为utf-8编码的话,则需要先将str1进行解码成unicode编码,再进行编码即可,此时得到的结果同str2转换的结果是一致的。...当中文字符串使用ASCII编码进行解码之后,本身就报错了,后边的encode(‘utf-8’)根本就没有执行到。...关于Python2中字符串编码的问题,就先介绍到这里了,相信大家应该有了一个初步的认识了,下一篇文章将介绍Python3中字符串编码的问题。
想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?...python3 和 python2 是不兼容的,而且差异比较大,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的。...目前实际应用中大部分暂不考虑 Python3,有的时候注意写兼容 2/3 的代码。用 Python2 为主的写新代码时要考虑以后迁移到 Python3 的可能性。...如果为了找工作还是学Python 2,学会了Python 2,由Python 2转到python3也不难。 说了半天,Python2与Python3到底有何区别呢?...a[i:j]根据上下文转换为a.
Python2 和 Python3 中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。...编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。...在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。...但是不建议对 str 使用 encode,对 unicode 使用 decode, 这是 Python2 设计上的缺陷。...Python3 则进行了优化,str 只有一个 encode 方法将字符串转化为一个字节码,而且 bytes 也只有一个 decode 方法将字节码转化为一个文本字符串。
Python2也有两种表示字符序列的类型,分别叫做str和Unicode。与Python3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。 ...但是,Python3的str实例和Python2的unicode实例都没有和特定的二进制编码形式相关联。要想把Unicode字符转换成二进制数据,就必须使用encode方法。...程序的核心部分应该使用Unicode字符类型(也就是Python3中的str、Python2中的unicode),而且不要对字符编码做任何假设。...我认为在Python2中,r和b是等效的。 ...‘b’字符加在字符串前面,对于python2会被忽略。加上’b’目的仅仅为了兼容python3,让python3以bytes数据类型(0~255)存放这个字符、字符串。
运行telnetlib的时候报错:TypeError: a bytes-like object is required, not ‘str’,原因是因为python2和python3的版本的差异。...在python2中可正常运行,而python3最重要的新特性也是对文本和二进制数据做了更清晰的区分。文本用unicode编码,为str类型,二进制数据则为bytes类型。...python有两种类型转换的函数encode(),decode() 。 encode(编码),可以将str类型编码为bytes。 decode(译码),可以将bytes类型转换为str类型。...因此在telnetlib交互的时候需要使用encode()。 tn.read_until("username:".encode())
领取专属 10元无门槛券
手把手带您无忧上云