python3-GBK编码字符串截取指定位置字串

python3-GBK编码字符串截取指定位置字串


Python3中默认是UTF-8,我们通过以下代码查询得到:
>>>import sys
>>>sys.getdefaultencoding()
'utf-8'


在utf-8环境中,中文字与英文字符一样处理,都是一个字符长度,如下:
>>>s='中文1234编码5678'
>>>s[:1]
'中文
>>>s[2]
'1'
>>>s[6:8]
'编码'


我们平时使用的中文文本经常是GBK格式,在文本显示时中文字符通常占有2个ASCII字符宽度,但字符串操作中时只算1个字符长度,这样在格式化输入输出时,如果中英文混排,字符串长度与显示长度就有不一致情况,计算比较复杂。
解决方法:先用encode方法将字符串转换为bytes,encode的作用就是使我们看到的直观的字符转换成计算机内的字节形式,这里encode的参数encoding='gbk'表示编码为GBK方案,errors='ignore'表示忽略错误。GBK编码方案中每个中文字编码为2个字节,这样就可以与排版显示的宽度一致,截取指定位置字串后再使用decode方法解码为GBK格式。编码方案也可以使用其他如utf-8、unicode等,但这样每个中文字符编码长度有可能与排版显示长度不一样,在格式化输出时计算长度就有点复杂了:
>>> ss = s.encode(encoding='gbk',errors='ignore')
>>> print(ss)
b'\xd6\xd0\xce\xc41234\xb1\xe0\xc2\xeb5678'
>>> ss[:4].decode(encoding='gbk',errors='ignore')
'中文'
>>> ss[8:12].decode(encoding='gbk',errors='ignore')

'编码'


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值