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来进行转换。

  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. if p >= length:
  27. break;
  28. else:
  29. i = p
  30. return string[0:i]

后记:

后来,我发现一种更为简单的方法

str = '中国人'

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

先转换成unicode,再取子串,然后转换成utf-8

上一篇:《HelloGitHub》第 20 期


下一篇:TCP状态变迁图