【Python】Python中字符串的编码分析

来源:互联网 发布:网络语言大大什么意思 编辑:程序博客网 时间:2024/06/13 06:10

前言

现在Python环境可以分为2和3。Python 2.x的开发环境默认编码是ascii,Python 3.x是Unicode。下面就这个编码问题简单讨论一下。

Python 3.x的编码

Python 3.x默认编码是Unicode,也就是说,Python 3.x的字符串是Unicode编码方式,控制台也是。

测试代码

# Python Version:3.5.1import sysb_str = b"abcd 1234"u_str = "abcd 1234 中文"u_str_a = "abcd 1234".encode('ascii')u_str_e = "abcd 1234 中文".encode('utf-8')u_str_gbk = "abcd 1234 中文".encode('gbk')if __name__ == '__main__':    print(sys.getdefaultencoding())    print(b_str)    print(u_str)    print(u_str_a)    print(u_str_e)    print(u_str_gbk)

打印如下

utf-8
b’abcd 1234’
abcd 1234 中文
b’abcd 1234’
b’abcd 1234 \xe4\xb8\xad\xe6\x96\x87’
b’abcd 1234 \xd6\xd0\xce\xc4’

  • 第一行是打印系统默认的编码,这里是utf-8
  • b_str的字符串前面加了一个b,表示以Ascii方式存储,控制台输出的字符串前面也有一个b,表示这是以Ascii输出;
  • u_str则是默认的字符串,是Unicode编码,控制台输出正常的字符串;
  • u_str_a是从Unicode转码Ascii;
  • u_str_e是从Unicode转码utf-8,实际上,utf-8是Unicode的一种实现方式;
  • u_str_gbk是从Unicode转码GBK,对照u_str_e的输出可见,其中文输出的编码与之不同。

Python 2.x的编码

Python 2.x的默认编码是ascii,控制台暂时不知道是Unicode编码还是utf-8编码。

测试代码

# coding=utf-8import sysb_str = b"abcd 1234"u_str = u"abcd 1234 中文"u_str_a = u"abcd 1234".encode('ascii')a_str_u = "abcd 1234".encode('utf-8')u_str_gbk = u"abcd 1234 中文".encode('gbk')if __name__ == '__main__':    print(sys.getdefaultencoding())    print(b_str)    print(u_str)    print(u_str_a)    print(a_str_u)    print(u_str_gbk.decode('gbk'))

打印内容如下:

ascii
abcd 1234
abcd 1234 中文
abcd 1234
abcd 1234
abcd 1234 中文

其测试代码类似于Python 3.x的测试代码。
- 第一行打印系统默认的编码方式:ascii
- b_str是测试ascii字符串,其在控制台正常输出,没有Python 3.x控制台下的b
- u_str是以Unicode方式编码的字符串,正常输出;
- u_str_a是Unicode转码成Ascii,然后输出;
- a_str_u是Ascii转码Unicode,然后输出
- u_str_gbk是Unicode转码成GBK,打印的时候需要GBK解码,才能在控制台正常输出。

小技巧

  • 在Python开发中,给字符串前面添加一个b,表示该字符串以Ascii方式编码,添加一个u,表示以Unicode方式编码,这种方式与文件的编码无关。
0 0