1,字元問題
在python3中,字元的定義是: 字元的定義是unicode 字元,也就是說: 從python 3 的 str 物件中獲取 的元素是unicode 字元,這相當於從python 2 的 unicode 物件中獲取的元素,而不是從 python 2 的 str 物件中獲取的原始位元組序列。
下面這個是python2和python3的區別比較:(把碼位轉換成位元組序列的過程是編碼;把位元組序列轉換成碼位的過程是解碼。)
二、python位元組概要
新的二進位制序列型別在很多方面與 python 2 的 str 型別不同。首先要知道,python 內建 了兩種基本的二進位制序列型別:python 3 引入的不可變 bytes 型別和 python 2.6 新增的可 變 bytearray 型別。( python 2.6 也引入了 bytes 型別,但那只不過是 str 型別的別名,與 python 3 的 bytes 型別不同。)
bytes 或 bytearray 物件的各個元素是介於0~255(含)之間的整數,而不像python 2 的 str 物件那樣是單個的字元。然而,二進位制序列的切片始終是同一型別的二進位制序列,包括長度為 1 的切片。
對於python2.6及以上(python2)。
對於python3
三、對比
my_bytes[0] 獲取的是乙個整數,而my_bytes[:1] 返回的是乙個長度為1 的 bytes 物件——這一點應該不會讓人意外。s[0] == s[:1] 只對 str 這個序列類 型成立。不過,str 型別的這個行為十分罕見。對其他各個序列型別來說,s[i] 返回乙個元素,而 s[i:i+1] 返回乙個相同型別的序列,裡面是 s[i] 元素。
四、其他
雖然二進位制序列其實是整數序列,但是它們的字面量表示法表明其中有 ascii 文字。因 此,各個位元組的值可能會使用下列三種不同的方式顯示。
1、可列印的 ascii 範圍內的位元組(從空格到 ~),使用 ascii 字元本身。
2、製表符、換行符、回車符和 \ 對應的位元組,使用轉義序列 \t、\n、\r 和 \。
3、其他位元組的值,使用十六進製制轉義序列(例如,\x00 是空位元組)。
五、二進位制序列和字串對比
除 了 格 式 化 方 法(format 和 format_map)和幾個處理unicode 數 據 的 方 法( 包 括 casefold、isdecimal、isidentifier、isnumeric、isprintable 和 encode) 之 外,str 類 型的其他方法都支援 bytes 和 bytearray 型別。這意味著,我們可以使用熟悉的字串方 法處理二進位制序列,如 endswith、replace、strip、translate、upper 等,只有少數幾個 其他方法的引數是 bytes 物件,而不是 str 物件。此外,如果正規表示式編譯自二進位制 序列而不是字串,re 模組中的正規表示式函式也能處理二進位制序列。python 3.0~3.4 不 能使用 % 運算子處理二進位制序列,但是根據「pep 461—adding % formatting to bytes and bytearray」( python 3.5 應該會支援。
二進位制序列有個類方法是 str 沒有的,名為 fromhex,它的作用是解析十六進製制數字對 (數字對之間的空格是可選的),構建二進位制序列:
六、bytes 和 bytearray 構建
1、乙個 str 物件和乙個 encoding 關鍵字引數。
2、乙個可迭代物件,提供 0~255 之間的數值。
3、乙個整數,使用空位元組建立對應長度的二進位制序列。[python 3.5 會把這個構造方法標 記為「過時的」,python 3.6 會將其刪除。參見「pep 467—minor api improvements for binary sequences」( ]
4、乙個實現了緩衝協議的物件(如 bytes、bytearray、memoryview、array.array);此時, 把源物件中的位元組序列複製到新建的二進位制序列中。
使用緩衝類物件構建二進位制序列是一種低層操作,可能涉及型別轉換。
使用緩衝類物件建立 bytes 或 bytearray 物件時,始終複製源物件中的位元組序列。與之相反, memoryview 物件允許在二進位制資料結構之間共享記憶體。如果想從二進位制序列中提取結構化信 息,struct 模組是重要的工具。下面會使用這個模組處理 bytes 和 memoryview 物件。
七、結構體和記憶體檢視
struct 模組提供了一些函式,把打包的位元組序列轉換成不同型別字段組成的元組,還有 一些函式用於執行反向轉換,把元組轉換成打包的位元組序列。struct 模組能處理 bytes、 bytearray 和 memoryview 物件。
memoryview 類不是用於建立或儲存位元組序列的,而是共享記憶體,讓你訪 問其他二進位制序列、打包的陣列和緩衝中的資料切片,而無需複製位元組序列,例如 python imaging library(pil)2 就是這樣處理影象的。
1,結構體的格式:< 是小字節序,3s3s 是兩個 3 位元組序列,hh 是兩個 16 位二進位制整數。
2,使用記憶體中的檔案內容建立乙個 memoryview 物件……
3,然後使用它的切片再建立乙個 memoryview 物件;這裡不會複製位元組序列。
4,轉換成位元組序列,這只是為了顯示;這裡複製了 10 位元組。
5,拆包 memoryview 物件,得到乙個元組,包含型別、版本、寬度和高度。
6,刪除引用,釋放 memoryview 例項所佔的記憶體。
如果要處理二進位制資料,可以閱讀它們的文 檔:「 built-in types » memory views」( 和「struct—interpret bytes as packed binary data」(
python中字元,位元組,編碼格式等問題總結
一直以來,對python中的字元,位元組,編碼格式理解的懵懵懂懂的,遇到問題總是搞不清楚,最近看一些網路傳輸方面的知識時,剛好要用到這些知識,總結一下以備以後複習。首先說byte,也叫位元組,乙個位元組是8個bit。在python中,最小的資料儲存單位就是位元組,ascii碼中字元在python中都...
字元和位元組
一 位元組 的定義 位元組 byte 是一種計量單位,表示資料量多少,它是計算機資訊技術用於計量儲存容量的一種計量單位。二 字元 的定義 字元是指計算機中使用的文字和符號,比如1 2 3 a b c 等等。三 位元組 與 字元 它們完全不是乙個位面的概念,所以兩者之間沒有 區別 這個說法。不同編碼裡...
字元和位元組
不同的字元所佔的位元組是不同的。ascii碼 乙個英文本母 不分大小寫 佔乙個位元組的空間,乙個中文漢字佔兩個位元組的空間。乙個二進位制數字序列,在計算機中作為乙個數字單元,一般為8位二進位制數,換算為十進位制。最小值0,最大值255。如乙個ascii碼就是乙個位元組。utf 8編碼 乙個英文本元等...