python2 中 unicode 和 str 之间的转换及与python3 str 的区别
在python2中字符串分为unicode和str类型
StrToUnicode使用decode(),解码 UnicodeToStr使用encode(),编码
返回数据给前端时需要先将unicode转换为str类型,事实上,python2中的str就是一串字节(byte),而网络通信时,传输的就是字节.如果前端需要接收json数据,需要使用json.dumps()将数据转换为json格式进行返回,当数据是嵌套类型的数据,内层的数据可能无法直接转换为str类型的数据,这时可以使用eval()函数进行转换,再使用json.dumps()进行转换为json格式的数据,json事实上就是一串字符串.
python2默认情况下字符串的类型是str类型,如果需要得到unicode类型的字符串,需要使用下面的方式进行声明:
my_str=u"lowmanisbusy"#在变量前面加上u
在python2中如果没有重新指定字符编码,定义中文的字符串时,需要加上"u",指明该字符串为unicode类型,指定使用unicode编码对其进行编码保存:
my_zh_str=u"渣男不但丑"#在变量前面加上u
unicode编码:unicode编码为世界上所有字符都分配了一个唯一编号,为十六进制,如中文简体汉字“渣”的Unicode编号就是6E23,在python2就是"\u6e23",但是unicode仅仅定义了每个字符的编号,并没有定义如何将这个编号进行存储的方式,所以后来出现了utf-8,gbk等编码格式,它们都是unicode的一种实现方式,仍然使用了unicode中的唯一编号,个人对其的简单理解就是在unicode编码的基础之上又定义了对字符的存储方式.
在python3中字符串分为str和bytes两种类型
StrToBytes使用encode(),编码 BytesToStr使用decode(),解码
这里需要说明的是,python3中bytes类型的字符串,就相当于python2中str类型的字符串,python3中没有unicode类型的字符串,这里其实涉及到默认编码的问题,python3默认字符编码为:utf-8,python2默认字符编码为:ASCII,ASCII码包含了128个字符,其中包括所有的英文字符,阿拉伯数字,标点符号,控制符号等,却没有中文,中文是象形文字,需要使用到更多的字节进行组合来表示出每个汉字,因此ASCII是无法满足对中文的表示的,所以python2中如果没有重新设置字符编码的话,代码中就不允许出现str类型的中文字符串(可以指定为unicode类型),因为Cpython2解释器无法识别.至于ASCII,UNICODE,UTF-8之间的关系与区别这里就不细说了,可以自行去了解一下(utf-8编码 是 unicode编码的一种实现方式,个人理解可以认为是下面这样一种关系:utf-8<--->unicode<--->byte,最终,数据的传输仍然是以二进制的形式一个一个字节进行传输的)
默认情况下,python3中字符串的类型为str,在web框架中,会自动将str转换成byte向前端返回.
当需要将某种编码格式的bytes转换另外一种编码格式的bytes时需要先按原来的编码格式进行解码成str类型,再使用新的编码格式转换为bytes类型
如:若存在变量my_bt,其为编码格式gbk的bytes,需将其转换为utf-8的编码格式,需要进行如下的处理:
my_str=my_bt.decode("gbk")#解码 my_bt=my_str.encode("utf-8")#重新编码
因为python3中没有unicode类型的字符串,所有在python3中使用下面这种方式定义字符串是没有意义的
my_str=u"渣男不但丑"
ps:下面看下Python2之unicode转字符串
str.encode('unicode-escape').decode('string_escape')
总结
以上所述是小编给大家介绍的python2中unicode和str之间的转换及与python3str的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!