python -- 字符编码操作

python -- 字符编码操作

ASCII 一个英文字符只占一个字节,不能存中文,所以出现了Unicode。Unicode默认是2字节,8位。由于这样多出的多余空间,所以推出了utf-8(Unicode的扩展集,可变长),utf-8的英文和ASCII一样,一个字节,中文就变成3字节。

Unicode是中间件,需要靠它来转换。

graph TD
A[Unicode] -->|encode| B[UTF-8]
B -->|decode| A
A -->|encode| C[GBK]
C -->|decode| A

GBK需要转换成UTF-8格式流程:

  1. 首先通过解码[decode]转换成Unicode编码
  2. 然后通过编码[encode]转换成UTF-8的编码

UTF-8需要转换为GBK格式流程:

  1. 首先通过解码[decode]转换成Unicode编码
  2. 然后通过编码[encode]转换成GBK的编码

decode()里面填写的是原先的编码,encode()里面填写的是需要转成后的编码

获得Python版本的编码格式

Python3

# 在Python3中默认编码是Unicode,utf-8是Unicode的可变长字符集
# 在Python2中默认编码是ASCII

import sys

a = sys.getdefaultencoding()

# utf-8
print(a)

Python2

# 在Python3中默认编码是Unicode,utf-8是Unicode的可变长字符集
# 在Python2中默认编码是ASCII

import sys

a = sys.getdefaultencoding()

# ascii
print(a)

在Python2环境

#-*- coding:utf-8 -*-

import sys

a = sys.getdefaultencoding()
s = '你好!'
# 如果不加decode('utf-8'),系统会调用默认的编码解码(ascii),会报编码错
s_to_gbk = s.decode('utf-8').encode('gbk')
# ascii
print(a)
print(s_to_gbk)
# gbk
print(type(s_to_gbk))

写在后面

  • 无论在哪个pyhton版上,需要转码时,都先decode(),再encode()。
  • decode()里面加原始编码
  • encode()里面加需要编译后的编码
  • py程序头文件的[# -*- coding:utf-8-*-]是说明程序用utf-8编译,但是py程序内的字符串编码还是python默认的编码。所以转换编码的时候,还需要加decode,再加encode。
版本 默认编码
Python2 ACSII
Python3 Unicode
posted @ 2017-06-25 14:37  gzz041  阅读(180)  评论(0)    收藏  举报