Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space


Posted in Python onFebruary 23, 2020

今天遇到一个问题,使用python的find函数寻找字符串中的第一个空格时没有找到正确的位置,例如:

http://zc.whmc.edu.cn ==> 无法访问的网站或无效的招标网站

Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space

使用find(" ")函数寻找时找到的第一个空格对应在==>后面的那个位置。一开始觉得是编码问题,但是文件是用UTF-8编码的,按理说不应该产生编码问题,就用Sublime打开一看是这样的:

可以看到,我的Sublime设置了显示空白,所以第二个红线上方有一个白点,而第一个红线上方却没有,这说明第一个红线上方那个字符确实不是一个空格,也就是说函数的运行没有问题。但那个空格倒底是个什么东西呢?在Sublime中File-->Reopen with Encoding-->Hexadecimal打开文件可以看到是这样的:

Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space

在网上可以查到,==>对应的UTF-8编码是\x3d\x3d\x3e,所以前面的那个神秘字符的编码就是\xc2\xa0,上网查到这是一个叫做Non-breaking space的东西,用于阻止在此处自动换行和阻止多个空格被压缩成一个。至于解决方法,先用subplace("\xc2\xa0", " ")把这个特殊的空格替换一下就行了。

去除特殊空格:\xc2\xa0

在去除空格的时候遇到一种情况:

a = '2 '
b = '3'
print a.split(),b

输出结果:

['2\xc2\xa0'] 3

在网上可以查到,==>对应的UTF-8编码是\x3d\x3d\x3e,所以前面的那个神秘字符的编码就是\xc2\xa0,上网查到这是一个叫做Non-breaking space的东西,用于阻止在此处自动换行和阻止多个空格被压缩成一个。至于解决方法,先用subplace("\xc2\xa0", " ")

a = '2 '
b = '3'
 
print a.replace("\xc2\xa0", ""),b

输出结果:

Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space

python 爬虫爬取内容时, \xa0 、 \u3000 的含义与处理方法

处理方法

str.replace(u'\xa0', u' ')

最近用 scrapy 爬某网站,发现拿到的内容里面含有 \xa0 、 \u3000 这样的字符,起初还以为是编码不对,搜了一下才知道是见识太少 233 。

\xa0 是不间断空白符  

我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内。
而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表空白符nbsp(non-breaking space)。
latin1 字符集向下兼容 ASCII ( 0x20~0x7e )。通常我们见到的字符多数是 latin1 的,比如在 MySQL 数据库中。

这里也有一张简陋的Latin1字符集对照表。

\u3000 是全角的空白符

根据Unicode编码标准及其基本多语言面的定义, \u3000 属于CJK字符的CJK标点符号区块内,是空白字符之一。它的名字是 Ideographic Space ,有人译作表意字空格、象形字空格等。顾名思义,就是全角的 CJK 空格。它跟 nbsp 不一样,是可以被换行间断的。常用于制造缩进, wiki 还说用于抬头,但没见过。

这里还有一个 Unicode.org 上关于 CJK 标点符号块的字符代码表。

python中去掉字符串中的\xa0、\t、\n

今天帮女朋友从网络上收集一些信息,但是发现提取出的信息中有“\xa0”,并且无法去掉,查阅了相关资料,后发现该字符表示空格。

\xa0 是不间断空白符  
我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内。
而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表空白符nbsp(non-breaking space)。
latin1 字符集向下兼容 ASCII ( 0x20~0x7e )。通常我们见到的字符多数是 latin1 的,比如在 MySQL 数据库中。
有如下信息:

'T-shirt\xa0\xa0短袖圆领衫,体恤衫\xa0,', 'V-neck\xa0\xa0V型领\xa0sleeve\xa0\xa0袖子\xa0,',

我们如何将其中的\xz0去掉呢,试了re模块的sub方法,发现没有作用,于是又开始查阅相关资料,终于解决了该问题。方法如下:

>>> inputstring = u'\n           Door:\xa0Novum     \t   '
>>> move = dict.fromkeys((ord(c) for c in u"\xa0\n\t"))
>>> output = inputstring.translate(move)
>>> output
'           Door:Novum

另外还有一种更简单的方法,利用split方法:

>>> s
'T-shirt\xa0\xa0短袖圆领衫,体恤衫\xa0'
>>> out = "".join(s.split())
>>> out
'T-shirt短袖圆领衫,体恤衫'

可以发现利用translate方法、split()可以完美解决,并且还可以替换\t \n字符,由此又学到了新知识!

关于ord函数:
ord()函数是chr()函数(对于8位的ASCII字符串)或unichr()函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值,如果所给的Unicode字符超出了你的Python定义范围,则会引发一个TypeError的异常。

关于fromkeys方法:
dict中的fromkeys方法目的是创建一个只有key的字典,内部利用for循环,使三个字符的asii码值成为可迭代对象(本来的整数是不可迭代的),分别对其迭代,存入字典。

关于translate方法:
Python translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。接收到move返回的表(字典),之后对字符串进行替换。

join()方法:
join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串。可见该处用join方法真的是神来之笔,可谓绝妙!

值得注意的是,split方法中不带参数时,表示分割所有换行符、制表符、空格。

python2 可以这样

s=s.replace(unichr(0xa0),'')

到此这篇关于Python 字符串处理特殊空格\xc2\xa0 Non-breaking space的文章就介绍到这了,更多相关Python 特殊空格内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python操作json数据的一个简单例子
Apr 17 Python
详细探究Python中的字典容器
Apr 14 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python中树与树的表示知识点总结
Sep 14 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
python实现层次聚类的方法
Nov 01 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
Windows系统下pycharm中的pip换源
Feb 23 #Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 #Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 #Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 #Python
Python requests设置代理的方法步骤
Feb 23 #Python
详解Python修复遥感影像条带的两种方式
Feb 23 #Python
python2 对excel表格操作完整示例
Feb 23 #Python
You might like
php中cookie的作用域
2008/03/27 PHP
php 发送带附件邮件示例
2014/01/23 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
巴西网上药房:onofre
2016/11/21 全球购物
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
大学教师年终总结的自我评价
2013/10/29 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
python自动化八大定位元素讲解
2021/07/09 Python