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

編碼與解碼python

  • 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編碼。

1、# -*- coding: utf-8 -*-編碼

關於Python文件開頭的"編碼指示",也就是 # -*- coding: -*- 這個語句。Python 默認腳本文件都是 UTF-8 編碼的,當文件中有非 UTF-8 編碼範圍內的字符的時候就要使用"編碼指示"來修正。spa

#! /usr/bin/env python
# -*- coding: utf-8 -*-

str1 = "我是中國人"              
print "str1==>", str1

2、sys.defaultencoding.net

關於 sys.defaultencoding,這個在解碼沒有明確指明解碼方式的時候使用。code

示例以下:注意這裏的 str1 是 str 類型的,而不是 unicode。blog

#! /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 的,因此出錯了。對於這種狀況,咱們有兩種方法來改正錯誤。utf-8

#! /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:設置自動解碼的方式,再編碼,

 

http://www.javashuo.com/article/p-xygluhni-ee.htmlci

https://blog.csdn.net/u012735708/article/details/79086628unicode

相關文章
相關標籤/搜索