字節(jié)
8位2進(jìn)制(0~255)
字符串與編碼
ASCII碼(1字節(jié),僅包含英文黄琼、數(shù)字樊销、符號(hào)、控制符)===>Unicode碼(2或4字節(jié)脏款,漢字多數(shù)為2字節(jié)现柠,生僻字為4字節(jié))===>UTF-8碼(1~3字節(jié),英文只用1字節(jié)弛矛,漢字3字節(jié)够吩。如存在大量英文則比Unicode節(jié)省空間)、UTF-16碼(2或4字節(jié))
Python3默認(rèn)使用 UTF-8 編碼丈氓,因此支持多語言周循。
Python2需要在頭部添加注釋:# -*- coding: utf-8 -*-
格式化
f 關(guān)鍵字 或 format 方法
其中真需要大括號(hào)的場(chǎng)景,用{{
代替{
万俗,}}
代替}
湾笛。
str_1 = "hello"
str_2 = "world"
print(f"this is {str_1} {str_2}")
print("this is {} {}".format(str_1, str_2))
print("this is {val_1} {val_2}".format(val_1=str_1, val_2=str_2))
print("this is %s" % str_1)
對(duì)于單個(gè)字符的編碼:
ord()
字符 => Unicode編碼的任意進(jìn)制表示(默認(rèn)十進(jìn)制)
chr()
Unicode編碼的任意進(jìn)制表示 => 字符
三引號(hào)'''或"""
允許一個(gè)字符串跨多行,自始至終保持一小塊字符串的格式是所謂的WYSIWYG(所見即所得)格式
Unicode 字符串
引號(hào)前的u
表示這里創(chuàng)建的是一個(gè) Unicode 字符串闰歪。如果你想加入一個(gè)特殊字符嚎研,可以使用 Python 的 Unicode-Escape 編碼。如下例所示:
>>> u'Hello\u0020World !'
u'Hello World !'
轉(zhuǎn)義序列
-
\n
換行 -
\t
制表符(tab) -
\'
和\"
單雙引號(hào) -
\\
\
禁止轉(zhuǎn)義
引號(hào)前的r
表示該字符串不會(huì)轉(zhuǎn)義為制表符
print(r'test\tddd') #test\tddd
print('test\tddd') #test ddd
bytes類型
Python的字符串類型是str库倘,在內(nèi)存中以Unicode表示临扮,一個(gè)字符對(duì)應(yīng)若干個(gè)字節(jié)。如果要在網(wǎng)絡(luò)上傳輸教翩,或者保存到磁盤上杆勇,就需要把str變?yōu)橐宰止?jié)為單位的bytes。
Python對(duì)bytes類型的數(shù)據(jù)用帶b前綴的單引號(hào)或雙引號(hào)表示饱亿,其中\x
表示16進(jìn)制(Hexadecimal):
x = b'\xe5\x90\xb4'
采用encode()
進(jìn)行對(duì)應(yīng)編碼,采用decode()
進(jìn)行解碼,參數(shù)為編碼類型,如:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
>>>b'\xff\xfeKm\xd5\x8b(u'.decode('utf-16')
'測(cè)試用'
>>>"測(cè)試用".encode('unicode_escape')
b'\\u6d4b\\u8bd5\\u7528'
>>>"測(cè)試用".encode('gb2312')
b'\xb2\xe2\xca\xd4\xd3\xc3'
>>>"測(cè)試用".encode('utf-8')
b'\xe6\xb5\x8b\xe8\xaf\x95\xe7\x94\xa8'
- .decode([encoding], [errors='strict'])
默認(rèn)的參數(shù)就是strict蚜退,代表遇到非法字符時(shí)拋出異常闰靴;
如果設(shè)置為ignore,則會(huì)忽略非法字符繼續(xù)解析钻注;
如果設(shè)置為replace蚂且,則會(huì)用?取代非法字符;
如果設(shè)置為xmlcharrefreplace幅恋,則使用XML的字符引用膘掰。
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 01000001 | 00000000 01000001 | 01000001 |
中 | x | 01001110 001011011 | 11100100 10111000 10101101 |
如 "中" ,Unicode編碼為 \u4e2d
佳遣,Unicode 01001110001011011的對(duì)應(yīng)十進(jìn)制ord
為20013 识埋, UTF-8對(duì)應(yīng)16進(jìn)制encode
為b'\xe4\xb8\xad'
注意,只有bytes可以decode零渐,而字符串只能encode窒舟,因此當(dāng)字符串中文亂碼時(shí),需要先轉(zhuǎn)為bytes再轉(zhuǎn)回字符串:s.encode("utf-8").decode("unicode_escape")
字符串方法
- replace
"hello world".replace("hello", "fuck")