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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
python实现telnet客户端的方法
Apr 15 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
Python中的字符串替换操作示例
Jun 27 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
python获取点击的坐标画图形的方法
Jul 09 Python
基于python实现雪花算法过程详解
Nov 16 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
Python3列表List入门知识附实例
Feb 09 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
python 写一个水果忍者游戏
Jan 13 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 输出简单动态WAP页面
2009/06/09 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
用Python实现协同过滤的教程
2015/04/08 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
python实现爬山算法的思路详解
2019/04/09 Python
python使用KNN算法识别手写数字
2019/04/25 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
用Python进行websocket接口测试
2020/10/16 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
企业厂务公开实施方案
2014/03/26 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
事业单位聘任报告
2015/03/02 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
vscode内网访问服务器的方法
2022/06/28 Servers