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')
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')
'编码'