python截取中文字符串


python的中文處理還是比較麻煩的,utf-8的字符串的長度是1-6個字符,一不小心就會從中截斷,出現所謂的亂碼。下面這個函數提供了,從一段utf-8編碼的字符串中,截取固定長度的字串。ord(char)將字符轉換稱整數,根據utf-8的編碼規則,確定每個utf-8的字占用幾個字符,從而避免截斷的情況。
參數:
  string  :utf-8字符串,如果是別的字符編碼,請先轉換成utf-8(推薦所有字符串和文件都用utf-8格式的)
  length :字符數(注意不是中文字的個數)

題外話:
python的字符編碼,有幾個函數unicode(str,'charset'),str.decode('charset'),str.encode('charset')。
舉個例子,你要將gb2312轉為gbk,如下
str = unicode(str,'gb2312') #轉為unicode
str.encode('gbk')                #轉為gbk

實際上,linux系統中,你可以使用iconv -f gb2312 -t gbk sourcefile > targetfile來進行轉換。

 

[python]  view plain copy
 
  1. def subString(string,length):  
  2.     if length >= len(string):  
  3.     return string  
  4.     result = ''  
  5.     i = 0  
  6.     p = 0  
  7.     while True:  
  8.     ch = ord(string[i])  
  9.     #1111110x  
  10.     if ch >= 252:  
  11.         p = p + 6  
  12.     #111110xx  
  13.     elif ch >= 248:  
  14.         p = p + 5  
  15.     #11110xxx  
  16.     elif ch >= 240:  
  17.         p = p + 4  
  18.     #1110xxxx  
  19.     elif ch >= 224:  
  20.         p = p + 3  
  21.     #110xxxxx  
  22.     elif ch >= 192:  
  23.         p = p + 2  
  24.     else:  
  25.         p = p + 1     
  26.           
  27.     if p >= length:  
  28.         break;  
  29.     else:  
  30.         i = p  
  31.     return string[0:i]  

 

 

 

后記:

后來,我發現一種更為簡單的方法

str = '中國人'

str.decode('utf-8')[0:1].encode('utf-8')

先轉換成unicode,再取子串,然后轉換成utf-8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM