python2.x 中文字符串的截取

一、问题:在python3.x中运行的脚本,包含了文件名(含中文)的截取,文件名(含中文)的计数等,应用到python2.7中,即使指定utf-8编码,也不能实现相应的功能。

二、分析:

1.python2和python3编码区别

python3 源文件以UTF-8编码,所有字符串以unicode编码。

python2 源文件默认以ASCII编码,所以在读取中文时会报错,需在开头指定UTF-8编码:

# -*- coding: utf-8 -*-

2.UTF-8编码特点:

UTF-8编码将一个unicode字符编码成1~6个字节,常用英文字母编码成1个字节,汉字一般编码成3个字节(也有编码成4~6个字节)。

三、解决方案

例:str_a = '蓝67XV黑白',截取最后两位字符。

python3

str_b = str_a[-2:]

python2(已指定utf-8编码)

str_b = str_a.decode('utf-8')[-2:].encode('utf-8')

python3 所有字符串以unicode编码,无论中文字符、字母和数字都占相同的字节数,直接根据字符在字符串中的位置截取即可。

python2中,指定utf-8编码时(以避免中文字符识别错误),带有中文的字符串占字节数不同,一般以三位表示一个中文字符,比如 python 3中len(str_a)=7,python 2中len(str_b)=13。先对字符串解码,str_a.decode('utf-8') 表示当前编码是utf-8,将其解码为unicode(python中,unicode为编码的基本类型),len(str_a.decode('utf-8') )=7。截取完相应的字符串,再unicode编码encode成utf-8编码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值