Python—編碼與解碼(encode()和decode())


編碼與解碼

  • 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM