您的位置:首页 > 编程语言 > Python开发

python截取中文字符串

2008-12-05 14:39 465 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: