Python中的字符串操作和編碼Unicode詳解
本文主要給大家介紹了關(guān)于 Python中的字符串操作和編碼Unicode的一些知識(shí),下面話不多說(shuō),需要的朋友們下面來(lái)一起學(xué)習(xí)吧。
字符串類型
str:Unicode字符串。采用''或者r''構(gòu)造的字符串均為str,單引號(hào)可以用雙引號(hào)或者三引號(hào)來(lái)代替。無(wú)論用哪種方式進(jìn)行制定,在Python內(nèi)部存儲(chǔ)時(shí)沒(méi)有區(qū)別。
bytes:二進(jìn)制字符串。由于jpg等其他格式的文件不能用str進(jìn)行顯示,所以才用bytes來(lái)表示,bytes的每個(gè)字節(jié)為一個(gè)0-255的數(shù)字。如果打印的時(shí)候,Python會(huì)把能夠用ASCII表示的部分顯示為ASCII,這樣方便閱讀。bytes幾乎支持除了格式化以外的所有str的方法,甚至包括了re模塊
bytearray() :二進(jìn)制可原地變動(dòng)的字符串。
utf-8編碼范圍
| 范圍 | 字節(jié)數(shù) | 存儲(chǔ)格式 |
| 0x0000~0x007F (0 ~ 127) | 1字節(jié) | 0xxxxxxx |
| 0x0080~0x07FF(128 ~ 2047) | 2字節(jié) | 110xxxxx 10xxxxxx |
| 0x0800~FFFF(2048 ~ 65535) | 3字節(jié) | 1110xxxx 10xxxxxx 10xxxxxx |
| 0x10000~1FFFFFF(65536 ~ 2097152) | 4字節(jié) | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 0x2000000~0x3FFFFFF | 5字節(jié) | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 0x4000000~0x7FFFFFFF) | 6字節(jié) | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
字節(jié)順序標(biāo)記BOM
BOM是byte order marker的縮寫,
指定編碼寫入時(shí)的規(guī)則
Python在使用'utf-8'編碼寫入文件時(shí)不會(huì)寫入BOM頭,但是如果指定編碼'utf-8-sig'則會(huì)迫使Python寫入一個(gè)BOM頭。
使用'utf-16-be'不會(huì)寫入一個(gè)BOM頭,但是采用'utf-16'則會(huì)寫入一個(gè)BOM頭。
>>> open('h.txt','w',encoding='utf-8-sig').write('aaa')
3
>>> open('h.txt','rb').read()
b'\xef\xbb\xbfaaa'
>>> open('h.txt','w',encoding='utf-16').write('bbb')
3
>>> open('h.txt','rb').read()
b'\xff\xfeb\x00b\x00b\x00'
>>> open('hh.txt','w',encoding='utf-16-be').write('ccc')
3
>>> open('hh.txt','rb').read()
b'\x00c\x00c\x00c'
>>> open('h.txt','w',encoding='utf-8').write('ddd')
3
>>> open('h.txt','rb').read()
b'ddd'
讀取時(shí)的規(guī)則
如果指定了正確的編碼,那么BOM會(huì)忽略,否則BOM會(huì)顯示為亂碼或者返回異常。
>>> open('h.txt','r').read()
'锘縟dd'
>>> open('h.txt','r',encoding='utf-8-sig').read()
'ddd'
編碼與解碼
- chr和ord
>>> ord('中') #20013
>>> chr(20013) #'中'
- 把Unicode硬編碼進(jìn)字符串中。
'\xhh':用2位十六進(jìn)制來(lái)表示一個(gè)字符
'\uhhhh':用4位十六進(jìn)制來(lái)表示一個(gè)字符:
'\Uhhhhhhhh':用8位十六進(jìn)制來(lái)表示一個(gè)字符
>>> s = 'py\x74h\u4e2don' #'pyth中on'
str和bytes, bytearray進(jìn)行轉(zhuǎn)換
str.encode(encoding='utf-8')
bytes(s,encoding='utf-8')
bytes.decode(encoding='utf-8')
str(B, encoding='utf-8')
bytearray(string, encoding='utf-8')
bytearray(bytes)
文檔編碼聲明
Python默認(rèn)使用utf-8編碼。
# -*- coding: latin-1 -*- :表示聲明文檔為latin-1編碼。
幫助函數(shù)
sys.platform #'win32' sys.getdefaultencoding() # 'utf-8' sys.byteorder #'little' s.isalnum() #s表示字符串 s.isalpha() s.isdecimal s.isdigit() s.isnumeric() s.isprintable() s.isspace() s.isidentifier() #如果字符串可以用作變量名,那么返回True s.islower() s.isupper() s.istitle()
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
Python K最近鄰從原理到實(shí)現(xiàn)的方法
這篇文章主要介紹了Python K最近鄰從原理到實(shí)現(xiàn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
原來(lái)我一直安裝 Python 庫(kù)的姿勢(shì)都不對(duì)呀
平常我都是直接執(zhí)行 pip install 安裝的第三方庫(kù),很多教程也是這么介紹的,一直以來(lái)我都認(rèn)為這是標(biāo)準(zhǔn)的、正確的安裝 Python 第三方庫(kù)的姿勢(shì)。下面小編給大家分享一篇教程,一起看看吧2019-11-11
舉例詳解Python中threading模塊的幾個(gè)常用方法
這篇文章主要介紹了舉例詳解Python中threading模塊的幾個(gè)常用方法,threading模塊用來(lái)創(chuàng)建和操作線程,是Python學(xué)習(xí)當(dāng)中的重要知識(shí),需要的朋友可以參考下2015-06-06
Python 中pandas索引切片讀取數(shù)據(jù)缺失數(shù)據(jù)處理問(wèn)題
pandas是一個(gè)Python軟件包,提供快速,靈活和富于表現(xiàn)力的數(shù)據(jù)結(jié)構(gòu),旨在使使用“關(guān)系”或“標(biāo)記”數(shù)據(jù)既簡(jiǎn)單又直觀。這篇文章主要介紹了pandas索引切片讀取數(shù)據(jù)缺失數(shù)據(jù)處理,需要的朋友可以參考下2019-10-10
在python中實(shí)現(xiàn)將一張圖片剪切成四份的方法
今天小編就為大家分享一篇在python中實(shí)現(xiàn)將一張圖片剪切成四份的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
基于Django?websocket實(shí)現(xiàn)視頻畫面的實(shí)時(shí)傳輸功能(最新推薦)
Django?Channels?是一個(gè)用于在?Django框架中實(shí)現(xiàn)實(shí)時(shí)、異步通信的擴(kuò)展庫(kù),本文給大家介紹基于Django?websocket實(shí)現(xiàn)視頻畫面的實(shí)時(shí)傳輸案例,本案例是基于B/S架構(gòu)的視頻監(jiān)控畫面的實(shí)時(shí)傳輸,使用django作為服務(wù)端的開發(fā)框架,需要的朋友可以參考下2023-06-06
Python使用melt和pivot實(shí)現(xiàn)DataFrame格式轉(zhuǎn)換
在數(shù)據(jù)處理與分析中,經(jīng)常遇到數(shù)據(jù)需要進(jìn)行格式轉(zhuǎn)換的情況,例如將數(shù)據(jù)從寬表格式轉(zhuǎn)換為長(zhǎng)表格式,或?qū)?shù)據(jù)重新分組匯總,Pandas提供了豐富的reshape操作,尤其是melt和pivot這兩個(gè)函數(shù),使得DataFrame可以在寬表與長(zhǎng)表之間高效轉(zhuǎn)換,本文介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
一篇文章帶你學(xué)習(xí)Python3的高階函數(shù)
這篇文章主要為大家詳細(xì)介紹了Python3的高階函數(shù),主要介紹什么是高階函數(shù),高階函數(shù)的用法以及幾個(gè)常見(jiàn)的內(nèi)置的高階函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

