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

最新文章

  1. 按钮点击,打开qq,用做联系客服
  2. VB.net 调用dll
  3. php安全配置记录
  4. OpenFlow.p4 源码
  5. 【weiphp微信开发教程】留言板插件开发详解
  6. 小波变换和motion信号处理(三)(转)
  7. TCP closing a connection
  8. tcpdump参数及使用介绍(转)
  9. 从UI开始
  10. 玩转INotifyPropertyChanged和ObservableCollection
  11. NDK开发过程自认为好的一些参考资料
  12. P1462 通往奥格瑞玛的道路
  13. Qt License 解读
  14. Ext 编辑 comobox编辑源只能选择一个
  15. 在Qt项目中添加全局宏变量来达到按方案编译的目的
  16. springBoot的数据库操作
  17. SkylineGlobe 6.6 开放的事件函数接口
  18. jmeter4.0 执行jmeter_server.bat报错
  19. "ProgrammerHome"项目笔记
  20. C++ leetcode::ZigZag Conversion

热门文章

  1. [iOS微博项目 - 1.0] - 搭建基本框架
  2. HDU 4432 Sum of divisors (水题,进制转换)
  3. 从0,1,2...n中统计0,1,2...9各出现了多少次【SWUN1597】
  4. HTTP Header 简介
  5. 基于 Paramiko 的 SSH 通讯类
  6. 处理Oracle中杀不掉的锁
  7. mac下批量删除.svn文件
  8. 继承虚函数浅谈 c++ 类,继承类,有虚函数的类,虚拟继承的类的内存布局,使用vs2010打印布局结果。
  9. 从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight
  10. HDU 4123 Bob’s Race 树的直径 RMQ