當前位置:首頁 » 編程語言 » python編碼識別

python編碼識別

發布時間: 2024-09-06 17:50:01

python編碼的問題

ot=os.listdir("F:")
printot

測試了下上面這兩條語句,中文命名的文件夾列表顯示如下:

['xd2xf4xc0xd6', 'xcdxbcxc6xac']


這不叫亂碼,只是以utf-8編碼表示中文字元串。你的本意是想要得到['abc', 'bcd', '音樂', '圖片']這種形式的輸出,但是實際顯示卻是utf-8編碼。

假設我們創建一個列表 ot = ['abc', 'bcd', '音樂', '圖片'],並且文件開頭定義了以utf-8格式進行編碼。那麼在內存里列表對象ot存儲的是'abc', 'bcd', 'xd2xf4xc0xd6', 'xcdxbcxc6xac'這四個值。


  1. 為什麼英文字元還是英文,中文字元就變成「亂碼」了呢?因為計算機不是人,它是看不懂'音樂'和'圖片'這幾個漢字字元的,它只認識字元的編碼值。對於多種編碼來說,鍵盤上那些英文字元編碼值都是一樣的。中文則不一樣。


  2. 為什麼列印字元串顯示出了中文,列印列表的時候顯示的卻是utf-8編碼?print 的作用是把計算機可理解的對象以人類可以理解的方式列印出來,具體顯示結果跟你要列印的對象有關,列印的是字元串,顯示的就是人類語言表示的字元串對象,列印的是列表,顯示的就是列表對象本身,也即該列表裡存儲的值。


printot表示列印一個列表對象ot,列印的是列表本身,所以它裡面的項以什麼形式存儲的就以
什麼形式顯示。

⑵ python怎麼知道一個字元串的編碼方式

字元串的編碼,有很多種如utf-8,gb2312,gbk,gb18030,bz2,zlib,big5,bzse64

python 對編碼的處理有兩個方法,decode()和 encode()方法

a='你好'
b='python'
printa.decode('utf-8').encode('gbk')##decode方法把字元串轉換為unicode對象,然後通過encode方法轉換為指定的編碼字元串對象
printb.decode('utf-8')##decode方法把字元串轉換為unicode對象

所以要讓python(或者說機器)來識別字元串的編碼,是一件很困難的事。編碼就是漢字和整數之間的對應,同一個整數,可以在不同的編碼中,都有對應的漢字。比如下面的例子,比特流'xe6xb0xb4xe5xa3xb6'在四種編碼中都有對應的漢字,但只有在utf-8編碼下,它對應的漢字才有意義。我們可以一眼看出這點,可是要讓計算機做到這點,就很難了。

>>>s='水壺'
>>>s
18:'xe6xb0xb4xe5xa3xb6'
>>>printunicode(s,'big5')
瘞游ㄥ
>>>printunicode(s,'gbk')
姘村6
>>>printunicode(s,'gb2312')
姘村6
>>>printunicode(s,'utf-8')
水壺

⑶ Python基本編碼格式

1、一般來說,聲明編碼格式在腳本中是必需的。2、如果Python源碼文件沒有聲明編碼格式,Python解釋器會默認使用ASCII編碼。但出現非ASCII編碼的字元,Python解釋器就會報錯。

1、Python 採用代碼縮進和冒號( : )來區分代碼塊之間的層次。2、在 Python 中,對於類定義、函數定義、流程式控制制語句、異常處理語句等,行尾的冒號和下一行的縮進,表示下一個代碼塊的開始,而縮進的結束則表示此代碼塊的結束。3、Python 中實現對代碼的縮進,可以使用空格或者 Tab 鍵實現。但無論是手動敲空格,還是使用 Tab 鍵,通常情況下都是採用 4 個空格長度作為一個縮進量(默認情況下,一個 Tab 鍵就表示 4 個空格)。4、對於 Python 縮進規則,初學者可以這樣理解,Python 要求屬於同一作用域中的各行代碼,它們的縮進量必須一致,但具體縮進量為多少,並不做硬性規定。

正確示例代碼:

錯誤示例代碼:

Python中使用 # 進行注釋,我們在使用# 的時候,# 號後面要空一格在行內注釋的時候,中間應該至少加兩個空格

print("你好,世界") # 注釋

** 使用的一般性原則:**

1、在二元運算符兩邊各空一格,算術操作符兩邊的空格可靈活使用,但兩側務必要保持一致2、不要在逗號、分號、冒號前面加空格,但應該在它們後面加(除非在行尾)3、函數的參數列表中,逗號之後要有空格4、函數的參數列表中,默認值等號兩邊不要添加空格5、左括弧之後,右括弧之前不要加添加空格6、參數列表, 索引或切片的左括弧前不應加空格

使用的一般性原則:

1、編碼格式聲明、模塊導入、常量和全局變數聲明、頂級定義和執行代碼之間空兩行2、頂級定義之間空兩行,方法定義之間空一行3、在函數或方法內部,可以在必要的地方空一行以增強節奏感,但應避免連續空行

1、導入總應該放在文件頂部,位於模塊注釋和文檔字元串之後,模塊全局變數和常量之前。

2、導入應該按照從最通用到最不通用的順序分組,分組之間空一行:

3、每個 import 語句只導入一個模塊,盡量避免一次導入多個模塊

命名規范這一塊的大家應該都比較熟悉了,但是不同的編程語言之間的明明規范也是有所區別的~

Python命名建議遵循的一般性原則:

引號使用的一般性原則:

Python跟其他幾個主流編程語言的分號使用區別很大Python的代碼末尾不需要加分號,而Java和C#等都需要添加

不要在行尾添加分號,也不要用分號將兩條命令放在同一行,例如:

Python學習日記

⑷ Python判斷字元串有多少bit(2023年最新解答)

導讀:今天首席CTO筆記來給各位分享關於Python判斷字元串有多少bit的相關內容,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!

python3字元串都是什麼編碼

編碼

字元串是一種數據類型,但是,字元串比較特殊的是還有一個編碼問題。

因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時採用8個比特(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進制11111111=十進制255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295。

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

Unicode

Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。

Unicode標准也在不斷發展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代操作系統和大多數編程語言都直接支持Unicode。

現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。

字母A用ASCII編碼是十進制的65,二進制的01000001;

字元0用ASCII編碼是十進制的48,二進制的00110000,注意字元Ɔ'和整數0是不同的;

漢字已經超出了ASCII編碼的范圍,用Unicode編碼是十進制的20013,二進制的0100111000101101。

如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是0000000001000001。

新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。

所以,又出現了把Unicode編碼轉化為「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間:

字元

ASCII

Unicode

UTF-8

A??01000001??0000000001000001??01000001?

中??x??0100111000101101??111001001011100010101101?

從上面的表格還可以發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟體可以在UTF-8編碼下繼續工作。

搞清楚了ASCII、Unicode和UTF-8的關系,我們就可以總結一下現在計算機系統通用的字元編碼工作方式:

在計算機內存中,統一使用Unicode編碼,當需要保存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從文件讀取的UTF-8字元被轉換為Unicode字元到內存里,編輯完成後,保存的時候再把Unicode轉換為UTF-8保存到文件:

瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:

所以你看到很多網頁的源碼上會有類似metacharset="UTF-8"/的信息,表示該網頁正是用的UTF-8編碼。

Python的字元串

在最新的Python3版本中,字元串是以Unicode編碼的,也就是說,Python的字元串支持多語言,例如:

print('包含中文的str')

包含中文的str

對於單個字元的編碼,Python提供了ord()函數獲取字元的整數表示,chr()函數把編碼轉換為對應的字元:

ord('A')65

ord('中')20013

chr(66)'B'chr(25991)'文'

如果知道字元的整數編碼,還可以用十六進制這么寫str

'u4e26587'//中文

byte

由於Python的字元串類型是str,在內存中以Unicode表示,一個字元對應若干個位元組。如果要在網路上傳輸,或者保存到磁碟上,就需要把str變為以位元組為單位的bytes。

Python對bytes類型的數據用帶b前綴的單引號或雙引號表示:

x=b'ABC'

要注意區分'ABC'和b'ABC',前者是str,後者雖然內容顯示得和前者一樣,但bytes的每個字元都只佔用一個位元組。

以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:

'ABC'.encode('ascii')

b'ABC''中文'.encode('utf-8')

b'xe4xb8xadxe6x96x87''中文'.encode('ascii')

Traceback(mostrecentcalllast):

File"stdin",line1,inmoleUnicodeEncodeError:'ascii'codeccan&#-1:ordinalnotinrange(128)

純英文的str可以用ASCII編碼為bytes,內容是一樣的,含有中文的str可以用UTF-8編碼為bytes。含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。

在bytes中,無法顯示為ASCII字元的位元組,用x##顯示。

反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法:

b'ABC'.decode('ascii')'ABC'b'xe4xb8xadxe6x96x87'.decode('utf-8')'中文'

要計算str包含多少個字元,可以用len()函數

len('ABC')3

len('中文')2

len()函數計算的是str的字元數,如果換成bytes,len()函數就計算位元組數

len(b'ABC')3

len(b'xe4xb8xadxe6x96x87')6

len('中文'.encode('utf-8'))6

1個中文字元經過UTF-8編碼後通常會佔用3個位元組,而1個英文字元只佔用1個位元組。

在操作字元串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行

#!/usr/bin/envpython3#-*-coding:utf-8-*-

第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。

格式化:

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

format%(...params)

'Hello,%s'%'world''Hello,world''Hi,%s,youhave$%d.'%('Michael',1000000)'Hi,Michael,youhave$1000000.'

%運算符就是用來格式化字元串的。在字元串內部,%s表示用字元串替換,%d表示用整數替換,%x表示16進制整數,有幾個%?佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括弧可以省略。

格式化整數和浮點數還可以指定是否補0和整數與小數的位數:

'%2d-%02d'%(3,1)Ɖ-01''%.2f'%3.1415926Ɖ.14'

有些時候,字元串裡面的%是一個普通字元怎麼辦?這個時候就需要轉義,用%%來表示一個%:

'growthrate:%d%%'%7'growthrate:7%'

day-04總結python字元串

1.什麼是字元串

序列,有序,不可變的

用單引號或者雙引號任意字元集,

2,字元串中的字元

普通字元:ན','sdfsdfsd','++(**^%$#@@','發技術規范舉案說法'

'''

python中的字元採用的是unicode編碼

1.什麼是編碼

就是數字和字元的一一對應的,其中字元對應的數字就是字元的編碼

a-97

b-98

2.編碼方式

ASCII碼表:針對數字字元,字母字元(26個小寫字母和26個大寫字母),一些英文中對應的符號進行編碼

小寫字母要大於大寫字母的編碼值,採用一個位元組對字元進行編碼,只能對128個字元進行編碼

Unicode碼:Unicode碼包含了ASCII碼表,同時能夠對世界上所有語言對應的符號進行編碼,

採用兩個位元組進行編碼,能夠編碼65536個字元

3.兩個函數

chr(編碼值)--將字元編碼值轉化為字元

ord(字元)--獲取字元對應的編碼值

中文編碼范圍0x4e00~~~~~0x9fa5

一旦一個字元串確定了,那麼字元串中每個字元的位置就確定了,而且每個字元會對應一個表示其位置和順序的下標值

1,下標(索引)

字元串中的每一個字元都有一個下標,代表在字元串中的位置

下標范圍是:0到字元串長度---10(代表第一個字元的位置)

-1~字元串長度-1(代表字元串中最後一個字元的位置)

'abc'#''

獲取單個字元

語法:字元串[下標]--獲取字元串中指定下標對應的字元

說明字元串--可以是字元串常量,也可以是字元串變數

[]---固定寫法

下標--字元的下標,不能越界。

獲取部分字元

語法:字元串[開始下標:結束下標:步長]

步長--一個整數

功能:從開始下標獲取到結束下標前位置,每次下標值增加步長,結果是字元串

注意:當步長是整數,開始下標對應的字元要在結束下標的前面

當步長是負數,開始下標對應的字元要在結束下標的後面

方法2:字元串[開始下表:結束下標](相當於步長是一)

獲取部分字元,省略下標

獲取部分字元的時候開始下標和結束下標都可以省略

a.開始下標省略

字元串[:結束下標:步長]或者字元串[:結束下表]

字元串是正數:從字元串開頭開始往後獲取

字元串是負數:從字元串結尾開始往前獲取

結束下標省略

字元串[開始下標::步長]

步長是正數,從開始下標從前往後獲取到字元串最後

步長是負數,從開始下標從後往前獲取到字元串開始

,加法運算

字元串1+字元串2將兩個字元串拼接在一起,產生一個新的字元串

乘法運算

字元串*n(正整數):字元串中的內容重復n次產生一個新的字元串

比較運算符

a.==!=

字元串1==字元串2---------判斷兩個字元串是否相等

b.,,=,=(所有的大寫字母編碼都比小寫的編碼小)

兩個字元串比較大下:從第一個開始,找到第一對不同的字元,然後比較他們的編碼值的大小

in和notin

字元串1in字元串2:判斷字元串2是否包含字元串1

字元串1notin字元串2:判斷字元串2是否不包含字元串1

len函數

len(序列)-------獲取序列的長度

len(字元串)----獲取字元串中字元的個數

str函數

str(數據):將數據轉換成字元串

其他數據轉換成字元串

所有的數據都可以轉換成字元串,轉換的時候就是在數據的值的最外面加引號

補充:系統對應的類型名不能用來給變數命名

字元串轉其他類型

字元串轉整數:int(字元串)去掉引號後本身就是個整數的字元串才能轉

字元串轉浮點型:Float(字元串)

字元串轉布爾:boll(字元串),除了空串會轉化成False,其他的都會轉化成True

格式字元串

指的是字元串中通過格式佔位符來表示字元串中變化,然後後面再通過其他的值來給佔位符賦值

含有格式佔位符的字元串%(佔位符對應的值)

說明:

含有格式佔位符有固定寫法,可以有多個

%----固定寫法

()----裡面值的個數要和前面的格式佔位符一一對應

%d--整數

%s--字元串

%f--小數

%c--字元(可以將數字轉換成字元)

字元串.capitalize()-將字元串第一個字元轉換成大寫

2.字元串對齊

字元串.center(width,fillchar)-居中

字元串.ljust(width,fillchar)-左對齊

字元串.rjust(width,fillchar)-右對齊

width-正整數,表示新的字元串的寬度

fillchar-字元,填充字元串

字元串.isalpha若字元串至少有一個字元,並且所有字元都是字母就返回True,否則返回False

字元串。isdigit()若字元串中只包含數字就返回True,否則返回False

若字元串中只包含數字字元,則返回True,否則返回False

3.join(seq)

字元串1.join(字元串2):將字元串1的內容插入到字元串2的每個字元之間

max(字元串)編碼最大

min(字元串)

count(str)|返回str在string裡面出現的次數

|islower()|如果字元串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回True,否則返回False

expandtabs(tabsize=8)|把字元串string中的tab符號轉為空格,tab符號默認的空格數是8。

|isspace()|如果字元串中只包含空白,則返回True,否則返回False

endswith(suffix)|檢查字元串是否以obj結束,如果beg或者end指定則檢查指定的范圍內是否以obj結束,如果是,返回True,否則返回False.

python判斷字元串有幾個字元

字元串長度

通過內置方法len()來計算字元串的長度,注意這個計算的是字元的長度。

aa='afebb'

bb='你'

printlen(aa)

printlen(bb)

python語言中如何判斷一個字元串有多少位

str=raw_input('隨便輸入點什麼')

long=len(str)

如果我輸入的是123456

len是一個內建函數,會計算我str這個變數輸入了幾個字元

最後long就等於6

結語:以上就是首席CTO筆記為大家整理的關於Python判斷字元串有多少bit的相關內容解答匯總了,希望對您有所幫助!如果解決了您的問題歡迎分享給更多關注此問題的朋友喔~

⑸ python3讀文件編碼錯誤怎麼辦

在python3中系統默認編碼是unicode,讀取文件經常會編碼錯誤導致報錯。


  1. 首先先確認要讀取文件的編碼,可這樣操作:

記事本打開文本文件,點擊「文件」-「另存為」查看編碼:

importcodecs
f=codecs.open(r"test.txt","r","gbk")
print(f.read())
f.close()

(示例的文件是ANSI所以使用GBK讀取)

以上就可以正確讀取想要的文件了

⑹ python有哪幾種編碼方式

第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單位元組編碼系統,並等同於國際標准IS/IEC
646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。
第二種:GBK和GB2312。能在計算機中顯示中文字元是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關系表,一個位元組只能最多表示256個字元,用處理中文顯然一個位元組是不夠的,所以我們需要採用兩個位元組來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。
第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免沖突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。
第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組,如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間。

⑺ Python文件處理里encoding和encode有事區別,bytes類型是什麼意思

python問題我來回答你。

  1. 首先你要知道的是,字元串在Python內部的表示是unicode(統一碼、萬國碼)編碼,很多編程語言都是這么設計的,各個國家通用編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

    decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼。

    encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串str2轉換成gb2312編碼。

    因此,轉碼的時候一定要先搞明白,字元串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼。

  2. bytes類型是 Python 3.x版本新增的數據類型,在 Python 2.x 中是不存在的。字元串是以字元為單位進行處理的,bytes類型是以位元組為單位處理的。

    bytes 只負責以位元組序列的形式(二進制形式)來存儲數據,至於這些數據到底表示什麼內容(字元串、數字、圖片、音頻等),完全由程序的解析方式決定。

    說白了,bytes 只是簡單地記錄內存中的原始數據,至於如何使用這些數據,bytes 並不在意,你想怎麼使用就怎麼使用,bytes 並不約束你的行為。

    bytes 類型的數據非常適合在互聯網上傳輸,可以用於網路通信編程;bytes 也可以用來存儲圖片、音頻、視頻等二進制格式的文件。

舉個例子:

b = b'' # 創建一個空的bytes

b = byte() # 創建一個空的bytes

b = b'hello' # 直接指定這個hello是bytes類型

b = bytes('string',encoding='編碼類型') #利用內置bytes方法,將字元串轉換為指定編碼的bytes

b = str.encode('編碼類型') # 利用字元串的encode方法編碼成bytes,默認為utf-8類型

bytes.decode('編碼類型'):將bytes對象解碼成字元串,默認使用utf-8進行解碼。

熱點內容
java開發要學習什麼技術 發布:2024-11-25 06:20:28 瀏覽:999
java猿 發布:2024-11-25 06:18:36 瀏覽:126
如何刷安卓44 發布:2024-11-25 06:18:32 瀏覽:528
安卓手機怎麼限制app時間 發布:2024-11-25 06:14:15 瀏覽:402
福建虛擬伺服器管理軟體雲伺服器 發布:2024-11-25 06:05:46 瀏覽:105
android載入圖片 發布:2024-11-25 06:05:00 瀏覽:167
linux的ls 發布:2024-11-25 05:47:56 瀏覽:843
oracle存儲過程游標實例 發布:2024-11-25 05:40:32 瀏覽:804
xpsql2000 發布:2024-11-25 05:20:20 瀏覽:372
如何設置安卓上拉菜單 發布:2024-11-25 05:20:12 瀏覽:5