Python学习之旅

Python2编码的问题

2018-01-20  本文已影响3人  依旧丶森

1.怀念python3

python3默认情况下,是通过unicode直接编码操作的,对于字符串、特殊字符、数字的支持都是一致的,字符串的编码和解码操作方式非常简洁。

   #字符串构造了一个str对象,默认情况下就是通过unicode直接编码的字符
   >>> s = "中文"
   #如果将字符转换成字节,进行编码操作:s.encode(“utf-8”)
   >>> x = s.encode("utf-8")
   >>> x
   b'\xe4\xb8\xad\xe6\x96\x87'

   如果将字节转换成字符,进行编码操作:s.decode(“utf-8”)
   >>> x
   b'\xe4\xb8\xad\xe6\x96\x87'
   >>> x.decode("utf-8")
   '中文'

2. 吐槽python2

python2中,默认情况下是通过ascii编码进行操作的。
python2中的字符串有这样几种类型 [basestring | str | unicode]
其中 str 和 unicode 是继承自 basestring 的。

糟心的来了:python2中创建的字符串s=”abc”是str类型的,但在python2中是 str 是 bytes字节类型保存的.......有毒。

   默认情况下:
   >>> s = "中文"
   >>> s
   '\xd6\xd0\xce\xc4'

   所以在包含中文字符串保存时,需要在字符串的前添加一个u字符
   #表示是通过unicode编码的
   >>> s = u'中文'
   >>> s
   u'\u4e2d\u6587'

   如果是默认字节形式的中文字符串,要得到原本的中文形式
   #需要decode()函数操作
   >>> s = "中文"
   >>> s
   '\xd6\xd0\xce\xc4'
   >>> x = s.decode("gbk")
   >>> x
   u'\u4e2d\u6587'
上一篇下一篇

猜你喜欢

热点阅读