python字串編碼

2021-08-21 05:09:52 字數 2538 閱讀 8612

常見字元編碼型別

ascii:美國資訊交換標準碼,是目前計算機中最廣泛使用的字符集編碼。每個 ascii 碼以 1 個位元組

儲存,例如數字字元 0 的 ascii 碼是 0110000,十進位制表示為 48。

unicode:為解決世界上上百種語言帶來混合、衝突,各國有各國的標準,顯示很容易出現亂碼。

unicode 就出現了,它把所有語言的字元都統一到一套 unicode 編碼中,並定義每個語言字元的標

準,所以 unicode 又稱統一碼,萬國碼。大部分程式語言都支援 unicode, python 內部編碼也支援

unicode。

gb2312:中國國家標準總局發布處理漢字的標準編碼。

gbk: gb2312 的擴充套件,向下相容 gb2312。

utf-8:針對 unicode 的可變長度字元編碼,又稱萬國碼。支援中文簡體繁體及其它語言(如英文,

日文,韓文)。

decode()

decode()函式作用是將其他編碼(比如 acsii、 byte string)的字串解碼成 unicode。

encode()

encode()函式作用是將 unicode 編碼成終端軟體能是識別的編碼,就能正常顯示了,比如 utf-8、

gbk。

python 編碼處理

#!/usr/bin/env python

c = "中文"

print c

# python test.py

file "test.py", line 2

syntaxerror: non-ascii character '\xe4' in file test.py on line 3, but no encoding

declared; see for details

在程式裡面直接列印中文,會報語法錯誤,這是因為 python 預設編碼是 ascii,無法處理其他編

碼。如果想列印中文,需要宣告編碼為 utf-8,上面也有寫過:

#!/usr/bin/env python

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

c = "中文"

print c

print type(c)

# python test.py

中文可以正常輸出中文了,型別是字串,這個字串是經過 python unicode 編碼後位元組組成的。

雖然可以正常輸入中文,並不意味的就萬事大吉了,如果終端編碼不是 utf-8 或其他軟體也不確定

編碼還會出現亂碼情況。所以還是要明白 python 處理編碼邏輯關係,才能更好的應對編碼問題。

切換到互動式直譯器:

>>> c = "中文"

>>> c.encode('utf-8')

traceback (most recent call last):

file "", line 1, in

unicodedecodeerror: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in

range(128)

如果直接轉成 utf-8 是不允許的,報錯 unicode 解碼錯誤,大概意思是說 ascii 碼不能解碼位元組字

符串。上面講到encode()函式作用是將 unicode 碼解碼,而現在的 c 變數並非是 unicode 碼,而是位元組字

符串,算是 unicode 的一種吧?。

故此,不能使用 encode(),而是先使用 decode()先解碼陳 unicode 再用 encode()編碼成 utf-8。

>>> c.decode('utf-8')

u'\u4e2d\u6587' # 4e2d 對應 unicode 值是"中", 6587 對應 unicdoe 值是"文"

>>> type(c.decode('utf-8'))

>>> print c.decode('utf-8') ?

中文》 print c.decode('utf-8').encode('utf-8')

中文如果是 unicode 字串可直接通過 encode()函式轉碼其他編碼。

>>> c = u'中文'

>>> c.encode('utf-8')

'\xe4\xb8\xad\xe6\x96\x87'

>>> print c.encode('utf-8')

中文看下位元組字串和 unicode 字串區別:

>>> c = '中文'

>>> u = u'中文'

>>> c

'\xe4\xb8\xad\xe6\x96\x87'

>>> u

u'\u4e2d\u6587'

>>> len(c)

6>>> len(u)

2位元組字串長度要比 unicode 長的多,而 unicode 長度就是字元長度。

總結下:python 處理編碼流程大致是這樣的, ascii --> decode() --> unicode --> encode() -

-> 終端能識別的編碼, unicode 算是乙個中間碼,有著承上啟下的作用。

Python字串編碼

在python中有些特殊的地方是存在兩種字串,分別為str和unicode字串,他們都繼承自basestring。如 s hello world s為str us u hello world us為unicode。使用help str 和help unicode 可以檢視各自說明,他們都有decod...

Python字串 編碼

字串str 作用 用來記錄文字資訊 字面值表示方法 用引號括起來的部分都是字串 單引號 雙引號 三單引號 三雙引號 空字串 字串的字面值表示方式 hello hello hello hello 單引號和雙引號的區別 單引號內的雙引號不算結束符 雙引號內的單引號不算結束符 三引號的作用 三引號內可以包...

python字串編碼

python3支援unicode ord 可以把字元轉換成對應的unicode碼。chr 可以把十進位制轉換成對應的字元。is not is,判斷兩個物件是否相同,比較的id 成員操作符 in not in判斷某個字元 子字串 是否存在於字串中。可變字串 字串屬於不可變物件,不支援原地修改,如果需要...