【292】Python 关于中文字符串的操作
参考:什么是字符编码?
一、相关说明
Python 中关于字符串的操作只限于英文字母,当进行中文字符的操作的时候就会报错,以下将相关操作方法进行展示。
写在前面:如何获得系统的默认编码 ?
1 2 3 | >>> import sys >>> print sys.getdefaultencoding() ascii |
通过如下代码查询不同的字符串所使用的编码,具体操作详见:用chardet判断字符编码的方法
由此可见英文字符与中文字符用的是不一样的编码,因此需要将中文字符转为 Unicode 编码才能正常的计算了!
1 2 3 4 5 6 7 | >>> import chardet >>> print chardet.detect( "abc" ) { 'confidence' : 1.0 , 'language' : ' ', ' encoding ': ' ascii'} >>> print chardet.detect( "我是中国人" ) { 'confidence' : 0.9690625 , 'language' : ' ', ' encoding ': ' utf - 8 '} >>> print chardet.detect( "abc-我是中国人" ) { 'confidence' : 0.9690625 , 'language' : ' ', ' encoding ': ' utf - 8 '} |
通过 decode('utf-8') 将中文字符串解码,便可以正常操作,要相对中文字符进行相关操作,涉及到字符串函数的,需要按如下操作。
decode 的作用是将其他编码的字符串转换成 unicode 编码,如 str1.decode('utf-8'),表示将 utf-8 编码的字符串 str1 转换成 unicode 编码。
encode 的作用是将 unicode 编码转换成其他编码的字符串,如 str2.encode('utf-8'),表示将 unicode 编码的字符串 str2 转换成 utf-8 编码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> m = "我是中国人" >>> m '\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba' >>> print m 我是中国人 >>> # 为解码前长度为15,utf-8编码 >>> len (m) 15 >>> n = m.decode( 'utf-8' ) >>> n u '\u6211\u662f\u4e2d\u56fd\u4eba' >>> print n 我是中国人 >>> # 解码后长度为5,可以正常的操作,Unicode编码 >>> len (n) 5 |
将 utf-8 与 Unicode 编码转化函数如下:
1 2 3 4 5 6 7 8 9 | def decodeChinese( string ): "将中文 utf-8 编码转为 Unicode 编码" tmp = string.decode( 'utf-8' ) return tmp def encodeChinese( string ): "将 Unicode 编码转为 utf-8 编码" tmp = string.encode( 'utf-8' ) return tmp |
二、截取中英文字符串
代码如下:
1 2 3 4 5 6 7 8 9 | def cutChinese(string, * se): "实现汉字截取方法 —— 默认start为开始索引,不写end就是到结尾,否则到end" start = se[ 0 ] if len (se)> 1 : end = se[ 1 ] else : end = len (string) tmp = string.decode( 'utf-8' )[start:end].encode( 'utf-8' ) return tmp |
调用方法如下:
1 2 3 4 5 6 7 8 9 | >>> from win_diy import * >>> print win.cutChinese( "我是一个abc" , 2 ) 一个abc >>> print win.cutChinese( "我是一个abc" , 2 , 4 ) 一个 >>> print win.cutChinese( "我是一个abc" , 2 , 5 ) 一个a >>> print win.cutChinese( "我是一个abc" , 2 , 6 ) 一个ab |
三、判断变量编码格式
通过 isinstance 函数或 type 函数可以判断字符串类型
通过 chardet.detect
函数可以判断字符串的编码格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | >>> import chardet >>> a = "abc" >>> isinstance (a, str ) True >>> chardet.detect(a)[ 'encoding' ] 'ascii' >>> isinstance (a, unicode ) False >>> b = "中国" >>> isinstance (b, str ) True >>> chardet.detect(b)[ 'encoding' ] 'utf-8' >>> isinstance (b, unicode ) False >>> # 用chardet.detect函数判断Unicode会报错 >>> c = b.decode( 'utf-8' ) >>> isinstance (c, unicode ) True |
posted on 2018-01-18 16:03 McDelfino 阅读(9618) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)