python中去除全角空格

最近遇到一个需求是要清除中文字串中的全角空格(数据是GBK编码,全角空格的GBK编码是\xa1\xa1)。

一开始直接使用str.replace(‘ ’,‘’)来去除,结果是部分结果出现乱码,经过分析,知道了python中的str类是“字节串”,匹配的时候是按照字节进行匹配的,所以如果\xa1\xa1是分布是两个字符之间,也会被去掉,因而导致结果不是我们想要的,比如这个例子:

1
2
3
4
5
6
# -*- <span class="goog_qs-tidbit goog_qs-tidbit-1">coding: cp936 -*-
string1 = '\xa1\xa1\xb0\xe9' #GBK下显示为“ 伴”</span>
string2 = '\xb0\xa1\xa1\xe9' #GBK下显示为“啊¢”
 
print string1.replace( ' ' , '')
print string2.replace( ' ' , '')

输出结果都是“伴”。这个结果对于第一个字符串是正确的,而对于第二个字符串是错误的,因为第二个字串中的\xa1\xa1并不是一个独立的字符,而是“啊”(\xb0\xa1)的后半截加上“¢”(\xa1\xe9)的前半截,而且却被匹配剔除掉了。

为了解决这个问题,需要使用unicode进行编码,unicode编码的字符串才算是真正意义上的字符串,因为它真的是按照“字符”进行计数的。下面例子可以说明:

1
2
print len ( "啊¢" )   #输出4(个字节)
print len (u "啊¢" #输出2(个字符)

知道这个之后就有思路了:先把原字符串编码成unicode,然后进行全角空格剔除,就不会出现问题了,测试语句如下(其中u’\u3000′是全角空格的unicode编码):

1
2
3
4
5
6
7
# -*- coding: cp936 -*-
 
string1 = '\xa1\xa1\xb0\xe9' #GBK下显示为“ 伴”
string2 = '\xb0\xa1\xa1\xe9' #GBK下显示为“啊¢”
 
print string1.decode( 'GBK' ).replace(u '\u3000' , u'')  #输出“伴”
print string2.decode( 'GBK' ).replace(u '\u3000' , u'')   #输出“啊¢”

大功告成,如果要把unicode重新变成GBK编码的话,用unicode.encode(‘GBK’)即可。

 

关于python对编码处理,更详细的参考这篇文章:

http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值