python 字符串内容
一、介紹python 2和python 3中的字符串類型及用途
python 2
str
簡單文本(如ascii編碼)和二進制數(shù)據(jù)(bytes)。
unicode
多字節(jié)文本(寬字符,如中文)。
python 3
str
unicode文本,包含ascii、utf-8等。
bytes
字節(jié),用于二進制數(shù)據(jù)表示,在一些需要低級數(shù)據(jù)結構的時候用到,譬如C語言等。
bytearray
bytes類型的一個變體,它是可變的并且支持原處修改。
二、字符編碼解碼的基礎知識及在python中的使用
編解碼
編碼:
根據(jù)一個想要的編碼名稱,把一個字符串翻譯為其原始字節(jié)形式。
解碼:
根據(jù)其編碼名稱,把一個原始字節(jié)串翻譯為字符串形式的過程。
python 2中編解碼對象的轉換關系
? ? ??decode? ? ? ? ? ? ? ?encode
str ---------> unicode --------->str
示例:
s = '北京'
s.decode('gb2312')
s.decode('gb2312').encode(encoding='utf-8',errors='strict')
python 3中編解碼對象的轉換關系
decode ? encode
bytes ------> str(unicode)------>bytes
示例:
s = '北京'
s.encode()
b'\xe5\x8c\x97\xe4\xba\xac' #\為轉義字符,x為十六進制的標記,u為unicode
s.encode().decode()
查看對象或平臺的編碼環(huán)境
1)檢查python默認的編碼
? ? ??import sys
? ? ??sys.getdefaultencoding()
? reload(sys)
? ? ??sys.setdefaultencoding('utf8')
2)檢查字符對象的編碼,這個模塊識別不準,可以參考鏈接
? https://blog.csdn.net/u013314786/article/details/77931548
? import chardet
? print chardet.detect(html)
? ? ?識別模塊不太準的時候,可以使用decode采用一些常用的中文編碼進行解碼,如GBK,GB2312等。
三、python 2和python 3在字符串使用的上的一些區(qū)別
1)python 3默認采用utf-8的字符集,而python 2默認采用ascii的編碼方式。
2)python 2中存在str和unicode類型,python 3分為bytes和str類型。
3)python 2的str類型可以表示二進制和字符串數(shù)據(jù),而python 3中進行了區(qū)分
4)python 2和3版本中的編解碼轉換規(guī)則不太一樣
python 2中進行編碼轉換,必須先轉換為unicode對象
python 3由于本身就值unicode,所以可直接進行轉換編碼
5)文件讀取
python 2
讀取文件時,采用r和rb讀取文件文件時,無區(qū)別。
讀取文件時,直接讀取字節(jié)再通過ascii解碼,如果包含非ascii字符的打印為直接。
read方法輸出指定字節(jié)數(shù)。
python 3
讀取文本文件時,采用r和rb模式讀取輸出是不同的,rb輸出字節(jié),r輸出字符。
讀取時采用utf-8進行解碼讀取。
read方法輸出字符數(shù)。
四、相關知識點
1)字節(jié)順序標記BOM
? 例如,在UTF-16和UTF-32編碼中,BOM指定大尾還是小尾格式(基本上,是確定一個位字符串的哪一端最重要)。
? ? ? 處理BOM的方法
? ? ? ? ? ?在文件進行寫入和讀取時使用具體編碼名來處理BOM,如下:
? ? >>> open('spam.txt', 'r', encoding='utf-8-sig').read()
? ? ?'spam\nSPAM\n' #使用具體的編碼名處理BOM
2)轉換編碼
我們總是可以把一個字符串轉換為不同于源字符集默認的一種編碼,但是,我們必須顯式地提供一個編碼名稱以進行編碼和解碼:
>>>S = 'A?BèC'
>>>S.encode() # Default utf-8 encoding
b'A\xc3\x84B\xc3\xa8C'
>>>T = S.encode('cp500') #轉換為cp500編碼
3)源文件字符集編碼聲明
改變默認的文件編碼形式,在文件的第一或第二行聲明。
# -*- coding: latin-1 -*-
?
重點提示:
1、數(shù)據(jù)分層表示方法。
? 文件層面: ? ? ? ? ? ? ? ? 字節(jié)序列,可分為各類編碼形式的字節(jié)序列,如unicode,base64,自定義的字節(jié)流。
? python腳本文件層面:? 字符序列,自動執(zhí)行編碼/解碼操作。
? python解釋器內存層面:unicode碼或字節(jié)碼。
?
轉載于:https://www.cnblogs.com/solitarywares/p/10097954.html
總結
以上是生活随笔為你收集整理的python 字符串内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三期一开场谢霆锋开着三轮拖拉机那一幕是
- 下一篇: 水中少女是谁画的呢?