python中文字字型 Python中的文字和位元組

2021-10-11 16:59:28 字數 2430 閱讀 8682

概述

最近工作中的專案同時使用到了 python2 和 python3 ,遇到了文字和位元組方面的 tricks,自己之前對這方面不太了解,學習並總結一下。

編碼介紹

unicode 標準

unicode 是用於表示文字以供計算機進行處理的通用字元編碼標準。unicode 標準提供了一種對多語種純文字進行一致編碼的方法,便於國際文字檔案的交換。

字元 的最佳定義是 unicode 字元 。unicode 只是乙個符號集,它只規定了符號的二進位制**,並沒有規定這個二進位制**應該如何儲存。

utf-8

utf-8 字元編碼是 unicode 的實現方式之一。

utf-8 是一種變長的編碼方式,它可以使用1~4個位元組表示乙個符號,根據不同的符號而變化位元組長度。

python 中的文字和位元組

python3 中從 str 物件中獲取的元素就是 unicode 字元,可以通過 編碼 (encode) 將 文字 轉化為 位元組。

然而 python2 中從 str 物件中獲取的元素是位元組序列,只有通過 解碼 (decode) 才能將 位元組 轉化為 文字 。

下面使用兩個版本的 python 對字串進行操作以作解釋:

# py3

>>> s = '123'

>>> type(s)

# 文字

>>> b = s.encode('utf-8')

>>> b

b'123'

>>> type(b)

# 位元組序列

# py2

>>> s = '123'

>>> type(s)

# 這裡是位元組序列

>>> b = s.encode('utf-8')

>>> b

'123'

>>> type(b)

# 這裡還是位元組序列

>>> b.decode() # decode 出來的才是文字

u'123'

>>> type(b.decode())

# 文字

>>> c = '一二三'

>>> c

'\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89' # 位元組序列

從上面的兩個**片段可以總結出 python2 和 python3 對於字串處理上的區別:

python 中的 u, b, r

python 的字串有時候前面會加乙個 u ,r 或者 b ,其含義如下:

u :表示字串中的元素是 unicode 字元。結合上面**的結論,可以認為:在 python3 中,字串前面是否加 u 的效果是一致的。在 python2 中,字串前面加 u 表示其中的元素是 unicode 字元,不加 u 表示 bytes。

b :表示字串中的元素是 bytes。同結合上面**的結論,可以認為:在 python2 中,字串前面是否加 b 的效果是一致的。在 python3 中,字串前面加 b 表示其中的元素是 bytes,不加 b 表示 unicode 字元。

r :表示字串是 原始字串(raw string) ,裡面的字元都是 raw string literals ,與 unicode 和 bytes 無關,因此 python2 和 python3 中含義是一致的。它的作用是使直譯器不會對諸如 \n, \t 等轉義字元進行轉義:

# py3

>>> s1 = '123\n123\t123'

>>> s1

'123\n123\t123'

>>> s2 = r'123\n123\t123'

>>> s2

'123\\n123\\t123' # 不轉義

python2 和 python3 在字串處理方面的相容

既然 python2 和 python3 在字串的處理方面有所不同,但是實際工作中卻需要寫出相容兩種版本的**,那麼應該如何處理呢?

我的做法是使用 __future__ 模組:

from __future__ import unicode_literals

該模組的作用是將 python2 的字串字面量的型別變為文字,而不是位元組,因此與 python3 是一樣的。

舉個栗子:

# py2

>>> from __future__ import unicode_literals

>>> s = '123'

>>> s

u'123'

>>> type(s)

# 文字

>>> b = b'123'

>>> b

'123'

>>> type(b)

# 位元組

總結目前 python2 與 python3 是並存的,因此在編寫**過程中需要注意其中的差異和相容性,不然就要出鍋了hhh,別問我為什麼這麼說 quq(雖然 python2 在 2020 年 1 月就要停止維護了)。

參考

設定靜態文字字型

在對話方塊中加入乙個靜態文字,注意,修改其id號,不要採用預設的id號 通過嚮導給該靜態文字對映乙個cstatic型的成員變數 cstatic m captionctrl 在對話方塊類中加入乙個成員變數 cfont m font 在oninitdialog 中寫下 m font.createfont...

css背景,文字,字型

一 背景 1.background color,為元素設定背景色。p 預設為透明也可以用 00000十六進製制還可以用rgb來表示。2.background image,背景預設null,body.可以將背景放在任意位置。3.background repeat,背景重複 平鋪,body.引數分別為 ...

Css顏色和文字字型

顏色名表示,比如 red 紅色,gold 金色 16進製制數值表示,比如 ff0000 表示紅色,這種可以簡寫成 f00 rgb顏色 紅 r 綠 g 藍 b 三個顏色通道的變化 background color rgb 200,100,0 rgba顏色 紅 r 綠 g 藍 b 透明度 a backg...