python 中文字串處理 獲得子串

2021-07-15 07:59:16 字數 1900 閱讀 4675

由於python的處理是按照編碼來處理的比如:

str=」中國年」

原始檔編碼格式是utf-8

str[0:len(str)-1]=」中國」 ?

這是錯誤的!

年有三個uft-8編碼,所以還剩2個

所以會出現中國+亂碼,選取字串子串和 長度的操作是對unicode編碼的字串和ascii編碼字串操作進行。這裡就當其為ascii字串,所以出現錯誤

str=u」中國年」

print str[0:len(str)-1]//正確

str=」中國年」

print str[0:len(str)-1]//亂碼

python的字串

搞清楚了令人頭疼的字元編碼問題後,我們再來研究python對unicode的支援。

因為python的誕生比unicode標準發布的時間還要早,所以最早的python只支援ascii編碼,普通的字串』abc』在python內部都是ascii編碼的。python提供了ord()和chr()函式,可以把字母和對應的數字相互轉換:

ord(『a』)

65 chr(65)

『a』

python在後來新增了對unicode的支援,以unicode表示的字串用u』…』表示,比如:

print u』中文』

中文 u』中』

u』\u4e2d』

寫u』中』和u』\u4e2d』是一樣的,\u後面是十六進製制的unicode碼。因此,u』a』和u』\u0041』也是一樣的。

兩種字串如何相互轉換?字串』***』雖然是ascii編碼,但也可以看成是utf-8編碼,而u』***』則只能是unicode編碼。

把u』***』轉換為utf-8編碼的』***』用encode(『utf-8』)方法:

u』abc』.encode(『utf-8』)

『abc』

u』中文』.encode(『utf-8』)

『\xe4\xb8\xad\xe6\x96\x87』

英文本元轉換後表示的utf-8的值和unicode值相等(但占用的儲存空間不同),而中文字元轉換後1個unicode字元將變為3個utf-8字元,你看到的\xe4就是其中乙個位元組,因為它的值是228,沒有對應的字母可以顯示,所以以十六進製制顯示位元組的數值。len()函式可以返回字串的長度:

len(u』abc』)

3 len(『abc』)

3 len(u』中文』)

2 len(『\xe4\xb8\xad\xe6\x96\x87』)

6 len(『中文』)

6

反過來,把utf-8編碼表示的字串』***』轉換為unicode字元串u』***』用decode(『utf-8』)方法:

『abc』.decode(『utf-8』)

u』abc』

『\xe4\xb8\xad\xe6\x96\x87』.decode(『utf-8』)

u』\u4e2d\u6587』

print 『\xe4\xb8\xad\xe6\x96\x87』.decode(『utf-8』)

中文

由於python源**也是乙個文字檔案,所以,當你的源**中包含中文的時候,在儲存源**時,就需要務必指定儲存為utf-8編碼。當python直譯器讀取源**時,為了讓它按utf-8編碼讀取,我們通常在檔案開頭寫上這兩行:

解決方法:

str.decode(「utf-8」)[0:len(str.decode(「utf-8」)-1].encode(「utf-8」)

python中文字串編碼處理

1。字串還是位元組串?我認為,python的字串只能說是位元組串,你甚至可以在裡面存放一張或者乙個二進位制可執行檔案 import types f open d r pic f.read print type pic types.stringtype print pic 如果存在,這段 會顯示tru...

HBase處理中文字串

在設定scan的startrowkey與endrowkey時,經常需要在某個條件字串後面補充出乙個範圍。singlecolumnvaluefilter也會用到 比如 我的條件字串是 abc scan時我需要將下述內容都囊括到我scan的範圍內。abc123 abcdabc abccca 這時候我st...

Python擷取中文字串

在gbk編碼下,請編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串,但是要保證漢字不被截半個,同時忽略字串中的數字後輸出最終結果 coding gbk import re deffunc s,length g join re.findall r d s 這裡也可以用g fi...