編碼與解碼
- decode英文意思是解碼,encode英文原意是編碼。
- Python 里面的編碼和解碼也就是 unicode 和 str 這兩種形式的相互轉化。編碼是 unicode -> str,解碼是 str -> unicode。
- 字符串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼, 即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
- decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。
- encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。
一、# -*- coding: utf-8 -*-
關於Python文件開頭的"編碼指示",也就是 # -*- coding: -*- 這個語句。Python 默認腳本文件都是 UTF-8 編碼的,當文件中有非 UTF-8 編碼范圍內的字符的時候就要使用"編碼指示"來修正。
#! /usr/bin/env python # -*- coding: utf-8 -*- str1 = "我是中國人" print "str1==>", str1
二、sys.defaultencoding
關於 sys.defaultencoding,這個在解碼沒有明確指明解碼方式的時候使用。
示例如下:注意這里的 str1 是 str 類型的,而不是 unicode。
#! /usr/bin/env python # -*- coding: utf-8 -*- str1 = "我是中國人" print "str1==>", str1 str2 = str1.encode('gb2312') # 程序執行到這一步會報錯,解決方法有下面兩種
str1.encode('gb2312') 這句代碼將 str1 重新編碼為 gb2312 的格式,即進行 unicode -> str 的轉換。因為 str1 本身就是 str 類型的,因此 Python 會自動的先將 str1 解碼為 unicode ,然后再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 str1 不是這個類型就會出錯。拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 str1 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了。對於這種情況,我們有兩種方法來改正錯誤。
#! /usr/bin/env python # -*- coding: utf-8 -*- str1 = "我是中國人" print "str1==>", str1 str2 = str1.decode('utf-8').encode('gb2312') # 方法1:手動解碼再編碼
#! /usr/bin/env python # -*- coding: utf-8 -*- import sys # Python2.5 初始化后會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入 if sys.version_info[0] == 3: from importlib import reload reload(sys) if sys.version_info[0] == 2: reload(sys) sys.setdefaultencoding('utf-8') str1 = "我是中國人" print "str1==>", str1 str2 = str1.encode('gb2312') # 方法2:設置自動解碼的方式,再編碼,
https://blog.csdn.net/qq_41185868/article/details/79039604
https://blog.csdn.net/u012735708/article/details/79086628