欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中的字符串類型解讀

 更新時間:2024年06月24日 10:00:46   作者:冰美式QAQ  
這篇文章主要介紹了python中的字符串類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、python2的字符串類型

在python2中,字符串一般有兩種類型,unicode和str。(python3中是Unicode類型)

  • str類型,字節(jié)碼類型,根據(jù)某種編碼把字符串轉(zhuǎn)成對應(yīng)的字節(jié),一個字符根據(jù)不同的編碼規(guī)則對應(yīng)不同的字節(jié)數(shù)。GBK編碼一個字符對應(yīng)兩個字節(jié)。
  • unicode類型,則是用unicode編碼的字符串,一個字符對應(yīng)兩個字節(jié)。

直接賦值字符串,類型為str,str為字節(jié)串,會按照開頭的encoding來編碼成對應(yīng)的字節(jié)。

賦值的時候在字符串前面加個u,類型則為unicode,直接按照unicode編碼成兩個字節(jié)。

# coding=utf-8
s1 = "字節(jié)串"
print(type(s1)) #輸出 <type 'str'>,按照開頭的encoding來編碼成相應(yīng)的字節(jié)
print(len(s1)) #輸出9,因為按utf8編碼,一個漢字占3個字節(jié),3個字就占9個字節(jié)

s2 = u"萬國碼"
print(type(s2)) #輸出 <type 'unicode'>,用unicode編碼,2個字節(jié)1個字符
print(len(s2)) #輸出3,unicode用字符個數(shù)來算長度,從這個角度上看,unicode才是真正意義上的字符串類型

E:\PycharmProjects\LEDdisplay2\venv\Scripts\python.exe E:/PycharmProjects/LEDdisplay2/1.py
<type 'str'>
9
<type 'unicode'>
3

Process finished with exit code 0

再舉個例子:

比如要從一個文件中找出所有后兩位是’字符’的詞語,在進行判斷的時候:

# coding=utf-8
s = '中文字符'
s[-2:] == '字符‘ 
# 返回false,本以為相等但在python2中是不相等的
# 這里的”字符是用開頭的encoding聲明解釋的,我開頭用的是utf8,漢字占3個字節(jié),所以“字符”占了6個字節(jié)),而s[-2:]取的是最后兩個”雙字節(jié)“,所以不相同。

s = u'中文字符'
s[-2:] == u'字符' 
# 加u強制轉(zhuǎn)換成unicode
# 返回true,這也是為什么說unicode是真正意義上的字符串類型。因為使用的是unicode,”字符“占的是兩個”雙字節(jié)“,一個"雙字節(jié)“一個字。

對于經(jīng)常處理中文字符串的人,統(tǒng)一用unicode(加u強制轉(zhuǎn)換成unicode)就可以避免這個坑了。

雖然有些字符串處理函數(shù)用str也可以,應(yīng)該是函數(shù)里面幫你處理了編碼問題。

二、python3的字符串類型

python3中,字符串是以Unicode編碼的,是str類型。

如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤,就需要把str變?yōu)橐宰止?jié)為單位的bytes。python3中對bytes類型的數(shù)據(jù)用帶b前綴的單引號或者雙引號表示。

以Unicode表示的str通過encode()方法可以編碼為指定的bytes。反過來,從網(wǎng)絡(luò)或磁盤上讀取的字節(jié)流,即bytes,要把bytes變?yōu)閟tr,通過decode()方法。

>>> "ABC".encode("utf-8")
b'ABC'
>>> "中文".encode("utf-8")
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
# 純英文的str可以用ASCII編碼為bytes,內(nèi)容是一樣的,含有中文的str可以用UTF-8編碼為bytes。
# 含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯
# 因為python3中字符串類型是Unicode編碼的,所以不需要先decode成Unicode,直接encode成指定編碼的bytes

反過來

>>> b'ABC'.decode("utf-8")
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode("utf-8")
'中文'
>>>

三、python3字符函數(shù)舉例

len()函數(shù),str類型字符串調(diào)用時,計算的是字符數(shù),bytes類型調(diào)用時,計算的是字節(jié)數(shù)

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
# 1個中文字符經(jīng)過UTF-8編碼后通常會占用3個字節(jié),而1個英文字符只占用1個字節(jié)
  • ord()函數(shù),獲取單個字符的整數(shù)表示
  • chr()函數(shù),把單個字符的整數(shù)轉(zhuǎn)換為對應(yīng)的字符
C:\Users\xxx>python3
Python 3.8.7 (tags/v3.8.7:6503f05, Dec 21 2020, 17:59:51) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> ord("A")
65
>>> ord("中")
20013
>>> chr(65)
'A'
>>> chr(25991)
'文'
>>>
  • chardet.detect(str),查看字符串的編碼格式
  • detect()函數(shù)接受一個參數(shù),一個非unicode字符串

它返回一個字典,其中包含自動檢測到的字符編碼和從0到1的可信度級別。

  • encoding:表示字符編碼方式;
  • confidence:表示可信度;
  • language:語言
# encoding: utf-8
import chardet
s = "中文".encode("utf-8")
print(chardet.detect(s))

D:\SoftInstall\Python\Python38\python3.exe E:/PycharmProjects/displayPY3/1.py
{'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}

Process finished with exit code 0

檢測出的編碼是ascii,confidence字段表示檢測的概率是0.7525(即75.25%)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pytorch實現(xiàn)常用乘法算子TensorRT的示例代碼

    Pytorch實現(xiàn)常用乘法算子TensorRT的示例代碼

    pytorch 用于訓(xùn)練,TensorRT用于推理是很多AI應(yīng)用開發(fā)的標配。大家往往更加熟悉 pytorch 的算子,而不太熟悉TensorRT的算子。本文介紹了Pytorch中常用乘法的TensorRT實現(xiàn),感興趣的可以了解一下
    2022-06-06
  • tensorboard實現(xiàn)同時顯示訓(xùn)練曲線和測試曲線

    tensorboard實現(xiàn)同時顯示訓(xùn)練曲線和測試曲線

    今天小編就為大家分享一篇tensorboard實現(xiàn)同時顯示訓(xùn)練曲線和測試曲線,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • PyQT實現(xiàn)菜單中的復(fù)制,全選和清空的功能的方法

    PyQT實現(xiàn)菜單中的復(fù)制,全選和清空的功能的方法

    今天小編就為大家分享一篇PyQT實現(xiàn)菜單中的復(fù)制,全選和清空的功能的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python中函數(shù)相關(guān)的變量作用域

    Python中函數(shù)相關(guān)的變量作用域

    這篇文章主要介紹了Python中函數(shù)相關(guān)的變量作用域,變量的作用域是指程序代碼能夠訪問該變量的區(qū)域,如果超出該區(qū)域,在訪問時就會出現(xiàn)錯誤,需要的朋友可以參考下
    2023-08-08
  • Python抓取框架Scrapy爬蟲入門:頁面提取

    Python抓取框架Scrapy爬蟲入門:頁面提取

    Scrapy吸引人的地方在于它是一個框架,任何人都可以根據(jù)需求方便的修改,下面這篇文章主要給大家介紹了關(guān)于Python抓取框架Scrapy爬蟲入門之頁面提取的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • Django之Mode的外鍵自關(guān)聯(lián)和引用未定義的Model方法

    Django之Mode的外鍵自關(guān)聯(lián)和引用未定義的Model方法

    今天小編就為大家分享一篇Django之Mode的外鍵自關(guān)聯(lián)和引用未定義的Model方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python函數(shù)聲明和調(diào)用定義及原理詳解

    python函數(shù)聲明和調(diào)用定義及原理詳解

    這篇文章主要介紹了python函數(shù)聲明和調(diào)用定義及原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Python 實現(xiàn)鏈表實例代碼

    Python 實現(xiàn)鏈表實例代碼

    這篇文章主要介紹了Python 實現(xiàn)鏈表實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Python中修改字符串的四種方法

    Python中修改字符串的四種方法

    在Python中,字符串是不可變類型,即無法直接修改字符串的某一位字符。這篇文章主要介紹了Python中修改字符串的四種方法,需要的朋友可以參考下
    2018-11-11
  • 用Python編寫一個簡單的俄羅斯方塊游戲的教程

    用Python編寫一個簡單的俄羅斯方塊游戲的教程

    這篇文章主要介紹了用Python編寫一個簡單的俄羅斯方塊游戲的教程,編寫俄羅斯方塊幾乎是每門編程語言基礎(chǔ)學(xué)習(xí)后的必備實踐,需要的朋友可以參考下
    2015-04-04

最新評論