python截取中文字符串
2024-08-25 09:51:07
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
最新文章
- 按钮点击,打开qq,用做联系客服
- VB.net 调用dll
- php安全配置记录
- OpenFlow.p4 源码
- 【weiphp微信开发教程】留言板插件开发详解
- 小波变换和motion信号处理(三)(转)
- TCP closing a connection
- tcpdump参数及使用介绍(转)
- 从UI开始
- 玩转INotifyPropertyChanged和ObservableCollection
- NDK开发过程自认为好的一些参考资料
- P1462 通往奥格瑞玛的道路
- Qt License 解读
- Ext 编辑 comobox编辑源只能选择一个
- 在Qt项目中添加全局宏变量来达到按方案编译的目的
- springBoot的数据库操作
- SkylineGlobe 6.6 开放的事件函数接口
- jmeter4.0 执行jmeter_server.bat报错
- ";ProgrammerHome";项目笔记
- C++ leetcode::ZigZag Conversion
热门文章
- [iOS微博项目 - 1.0] - 搭建基本框架
- HDU 4432 Sum of divisors (水题,进制转换)
- 从0,1,2...n中统计0,1,2...9各出现了多少次【SWUN1597】
- HTTP Header 简介
- 基于 Paramiko 的 SSH 通讯类
- 处理Oracle中杀不掉的锁
- mac下批量删除.svn文件
- 继承虚函数浅谈 c++ 类,继承类,有虚函数的类,虚拟继承的类的内存布局,使用vs2010打印布局结果。
- 从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight
- HDU 4123 Bob’s Race 树的直径 RMQ