python 中文字符串截取_python截取中文字符串 | 學步園

本文介绍了Python中处理中文字符串截取的问题,特别是在utf-8编码下如何避免截断导致的乱码。提供了一个函数`subString`,通过判断utf-8字符长度来正确截取字符串。还提到了Python中的字符编码转换方法以及一种更简洁的截取方式。
摘要由CSDN通过智能技术生成

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來進行轉換。

def subString(string,length):

if length >= len(string):

return string

result = ''

i = 0

p = 0

while True:

ch = ord(string[i])

#1111110x

if ch >= 252:

p = p + 6

#111110xx

elif ch >= 248:

p = p + 5

#11110xxx

elif ch >= 240:

p = p + 4

#1110xxxx

elif ch >= 224:

p = p + 3

#110xxxxx

elif ch >= 192:

p = p + 2

else:

p = p + 1

if p >= length:

break;

else:

i = p

return string[0:i]

後記:

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

str = '中國人'

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值