python2中編碼問題

2021-10-06 17:18:14 字數 2353 閱讀 2620

1. python 3 中 str 與 bytes

在 python3中,字串有兩種型別 ,str和bytes。

在 python 3 中你定義的所有字串,都是 unicode string型別,使用 type 和 isinstance 可以判別

# python3

>>> str_obj = "你好"

>>> type(str_obj)

>>> isinstance("你好", str)

true

>>> isinstance("你好", bytes)

false

bytes是乙個二進位制序列物件,只要在定義字串時前面加乙個b,就表示bytes型別的字串物件。

# python3

>>> byte_obj = b"hello world!"

>>> type(byte_obj)

>>> isinstance(byte_obj, str)

false

>>> isinstance(byte_obj, bytes)

true

但是在定義中文字串時,如果直接加上b,就會報錯,應該使用encode轉碼一下。

>>> byte_obj=b"你好"

file "", line 1

syntaxerror: bytes can only contain ascii literal characters.

>>> str_obj="你好"

>>> str_obj.encode("utf-8")

b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd'

2. python 2 中 str 與 unicode

在python2裡,字串也只有兩種型別,unicode和str。

當我們直接使用雙引號或單引號包含字元的方式來定義字串時,就是 str 字串物件

# python2

>>> str_obj="你好"

>>> type(str_obj)

>>> isinstance(str_obj, bytes)

true

>>> isinstance(str_obj, str)

true

而當我們在雙引號或單引號前面加個u,就表明我們定義的是 unicode 字串物件

# python2

>>> unicode_obj = u"你好"

>>> type(unicode_obj)

>>> isinstance(unicode_obj, bytes)

false

>>> isinstance(unicode_obj, str)

false

3. 如何檢測物件的編碼

所有的字元,在 unicode 字符集中都有對應的編碼值。

把這些編碼值按照一定的規則儲存成二進位制位元組碼,就是我們說的編碼方式,常見的有:utf-8,gb2312 等。

4. 編碼與解碼的區別

編碼和解碼,其實就是str與bytes的相互轉化的過程,我們這裡只說python3的

5. 如何設定檔案編碼

在python 2中,預設使用的是 ascii 編碼來讀取的,因此,我們在使用python 2的時候,如果你的python檔案裡有中文,執行是會報錯的。

而在 python 3 中,預設使用的是 uft-8 來讀取,所以省了不少的事。

對於這個問題,通常解決方法有兩種:

第一種方法

在 python2 中,可以在檔案頭部指定編譯器讀取原始碼時採取的編碼和解碼方式

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

# coding:utf-8

# coding=utf-8

以上三種書寫方式,任選一種即可

第二種方法

import sys 

reload(sys) 

sys.setdefaultencoding('utf-8')

這裡在呼叫sys.setdefaultencoding(『utf-8』) 設定預設的解碼方式之前,執行了reload(sys),這是必須的,因為python在載入完sys之後,會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入sys,才能呼叫 sys.setdefaultencoding 這個方法。

Python2編碼問題

以下內容說的都是 python 2.x 版本 我們看到的輸入輸出都是 字元 characters 計算機 程式 並不能直接處理,需要轉化成位元組資料 bytes 因為程式只能處理 bytes 資料。例如 檔案 網路傳輸等,處理的都是 bytes 資料 二進位制數字。孤立的 byte 是毫無意義的,所...

Python2編碼問題

以下內容說的都是 python 2.x 版本 我們看到的輸入輸出都是 字元 characters 計算機 程式 並不能直接處理,需要轉化成位元組資料 bytes 因為程式只能處理 bytes 資料。例如 檔案 網路傳輸等,處理的都是 bytes 資料 二進位制數字。孤立的 byte 是毫無意義的,所...

python2 編碼問題

coding utf 8 import sys reload sys sys.setdefaultencoding utf8 第一行是讓 以utf8格式解析 後面三行是讓python直譯器在decode時候用utf8進行decode 這樣所有字串都是utf8的了,如果遇到非utf8字串可以用deco...