0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python字符與字節(jié)

麥辣雞腿堡 ? 來源:Python都知道 ? 作者:了不起 ? 2023-07-05 15:55 ? 次閱讀

一個字符不等價于一個字節(jié),字符是人類能夠識別的符號,而這些符號要保存到計算的存儲中就需要用計算機能夠識別的字節(jié)來表示。一個字符往往有多種表示方法,不同的表示方法會使用不同的字節(jié)數(shù)。這里所說的不同的表示方法就是指字符編碼,比如字母A-Z都可以用ASCII碼表示(占用一個字節(jié)),也可以用UNICODE表示(占兩個字節(jié)),還可以用UTF-8表示(占用一個字節(jié))。字符編碼的作用就是將人類可識別的字符轉(zhuǎn)換為機器可識別的字節(jié)碼,以及反向過程。

UNICDOE才是真正的字符串,而用ASCII、UTF-8、GBK等字符編碼表示的是字節(jié)串。關(guān)于這點,我們可以在Python的官方文檔中經(jīng)常可以看到這樣的描述"Unicode string" , " translating a Unicode string into a sequence of bytes"

我們寫代碼是寫在文件中的,而字符是以字節(jié)形式保存在文件中的,因此當(dāng)我們在文件中定義個字符串時被當(dāng)做字節(jié)串也是可以理解的。但是,我們需要的是字符串,而不是字節(jié)串。一個優(yōu)秀的編程語言,應(yīng)該嚴(yán)格區(qū)分兩者的關(guān)系并提供巧妙的完美的支持。JAVA語言就很好,以至于了解Python和PHP之前我從來沒有考慮過這些不應(yīng)該由程序員來處理的問題。遺憾的是,很多編程語言試圖混淆“字符串”和“字節(jié)串”,他們把字節(jié)串當(dāng)做字符串來使用,PHP和Python2都屬于這種編程語言。最能說明這個問題的操作就是取一個包含中文字符的字符串的長度:

  • 對字符串取長度,結(jié)果應(yīng)該是所有字符串的個數(shù),無論中文還是英文
  • 對字符串對應(yīng)的字節(jié)串取長度,就跟編碼(encode)過程使用的字符編碼有關(guān)了(比如:UTF-8編碼,一個中文字符需要用3個字節(jié)來表示;GBK編碼,一個中文字符需要2個字節(jié)來表示)

注意:Windows的cmd終端字符編碼默認(rèn)為GBK,因此在cmd輸入的中文字符需要用兩個字節(jié)表示

>>> # Python2

>>> a = 'Hello,中國' # 字節(jié)串,長度為字節(jié)個數(shù) = len('Hello,')+len('中國') = 6+2*2 = 10

>>> b = u'Hello,中國' # 字符串,長度為字符個數(shù) = len('Hello,')+len('中國') = 6+2 = 8

>>> c = unicode(a, 'gbk') # 其實b的定義方式是c定義方式的簡寫,都是將一個GBK編碼的字節(jié)串解碼(decode)為一個Uniocde字符串

>>>

>>> print(type(a), len(a))

(, 10)

>>> print(type(b), len(b))

(, 8)

>>> print(type(c), len(c))

(, 8)

>>>

Python3中對字符串的支持做了很大的改動。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    942

    瀏覽量

    54836
  • 字符
    +關(guān)注

    關(guān)注

    0

    文章

    233

    瀏覽量

    25210
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84694
收藏 人收藏

    評論

    相關(guān)推薦

    探究python字節(jié)

    就是Python的“字節(jié)碼”文件。(但在Python 3上卻難覓其蹤 -- 原因是它們不再與.py文件出現(xiàn)在同一個目錄中,而是放在一個名為__pycache__的子目錄中了)?;蛟S你也已聽說過這是一種
    發(fā)表于 05-22 15:48

    python字符串拼接方式了解

    python字符串拼接的方式 在Python的實際開發(fā)中,很多都需要用到字符串拼接,python字符
    發(fā)表于 12-06 10:09 ?1034次閱讀

    字符流和字節(jié)流有什么那區(qū)別

    字符流在Java中,根據(jù)處理的數(shù)據(jù)單位不同,分為字節(jié)流和字符流。字符流是由字符組成的,例如 FileReader、FileWriter、Bu
    發(fā)表于 12-20 17:46 ?8057次閱讀
    <b class='flag-5'>字符</b>流和<b class='flag-5'>字節(jié)</b>流有什么那區(qū)別

    Python轉(zhuǎn)義字符使用總結(jié)資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是Python轉(zhuǎn)義字符使用總結(jié)資料免費下載主要內(nèi)容包括了:Python轉(zhuǎn)義字符,Python
    發(fā)表于 01-17 17:24 ?6次下載
    <b class='flag-5'>Python</b>轉(zhuǎn)義<b class='flag-5'>字符</b>使用總結(jié)資料免費下載

    什么是復(fù)制字符串?Python如何復(fù)制字符

    連續(xù)幾篇文章都在寫 Python 字符串,這出乎我的意料了。但是,有的問題,不寫不行,特別是那種靈機一動想到的問題,最后你發(fā)現(xiàn),很多人根本不懂卻又誤以為自己懂了。那就繼續(xù)刨根問底,探究個明白吧
    發(fā)表于 11-25 10:32 ?3019次閱讀

    Python字符的實例詳細說明

    本文檔的主要內(nèi)容詳細介紹的是Python字符的實例詳細說明包括了:Python 轉(zhuǎn)義字符,Python
    發(fā)表于 10-14 17:13 ?7次下載
    <b class='flag-5'>Python</b><b class='flag-5'>字符</b>的實例詳細說明

    Python字符數(shù)統(tǒng)計函數(shù)程序

    Python字符數(shù)統(tǒng)計函數(shù)程序免費下載。
    發(fā)表于 05-25 14:35 ?19次下載

    2.2 python字符串類型

    2.2 python字符串類型 1. 如何定義字符串? 字符串是Python中最常用的數(shù)據(jù)類型之一。 使用單引號或雙引號來創(chuàng)建
    的頭像 發(fā)表于 02-17 17:08 ?1432次閱讀

    Python-字符

    字符串就是 一串字符 ,是編程語言中表示文本的數(shù)據(jù)類型,在Python中使用一對雙引號 "" 或者一對單引號來定義.
    的頭像 發(fā)表于 02-16 15:05 ?1147次閱讀
    <b class='flag-5'>Python</b>-<b class='flag-5'>字符</b>串

    python字符串有哪些特定方法

    python字符串序列操作也適用于列表和元組。 python字符串還有獨有方法,即字符串對象的函數(shù),其他對象不可調(diào)用,只有
    的頭像 發(fā)表于 02-23 15:02 ?712次閱讀

    python字符串編寫有哪些方法

    python通過反斜杠\開頭來轉(zhuǎn)義特殊字符。比如用’\n’轉(zhuǎn)義換行符。 len()函數(shù)中,一個轉(zhuǎn)義字符占1個長度。
    的頭像 發(fā)表于 02-23 15:02 ?496次閱讀

    淺析python字符串模式匹配

    python字符串可以通過re模塊的模式匹配來處理文本。
    的頭像 發(fā)表于 02-23 15:04 ?2331次閱讀

    Python2與Python3中對字符串的支持

    其實Python3中對字符串支持的改進,不僅僅是更改了默認(rèn)編碼,而是重新進行了字符串的實現(xiàn),而且它已經(jīng)實現(xiàn)了對UNICODE的內(nèi)置支持,從這方面來講Python已經(jīng)和JAVA一樣優(yōu)秀。
    的頭像 發(fā)表于 07-05 16:15 ?734次閱讀

    Python字符編碼轉(zhuǎn)換

    UNICODE字符串可以與任意字符編碼的字節(jié)進行相互轉(zhuǎn)換,如圖: 那么大家很容易想到一個問題,就是不同的字符編碼的字節(jié)可以通過Unicode
    的頭像 發(fā)表于 07-05 16:25 ?1094次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>字符</b>編碼轉(zhuǎn)換

    字節(jié)流和字符流有什么區(qū)別?看完就知道!

    字節(jié)流和字符流有什么區(qū)別?看完就知道! 字節(jié)流和字符流是Java I/O系統(tǒng)中的兩個重要概念,用于處理輸入和輸出的數(shù)據(jù)。 首先,字節(jié)流是以
    的頭像 發(fā)表于 12-09 14:57 ?1502次閱讀