mysql 剔除不可见字符_不可见字符,Excel里最隐蔽的坑

小伙伴们好啊,我是流浪铁匠,今天为大家介绍的是excel数据整理时一类最常见的坑——不可见字符。

从unichar函数对应的uincode字符集结果来说,excel大约有111万+个字符,其中有不少字符的性质千奇百怪,由于unichar/unicode函数出现得晚(2013版本新增函数),因此现在还在用2010或以前版本的小伙伴们,如果经常面临网页或软件导出的数据,那么总会被一些看不到的字符影响统计和计算。

接下来和大家一一道来excel里各种常见的不可见的字符与对应解决方法。

0,文本识别符和空文本

字符串最前面的一个半角单引号。

f2364049803b326c6c61daadd2b6312f.png

严格来说,这个字符不属于字符串内的字符,而是excel的特殊格式设定,在字符串前加上这个半角单引号会使整个字符串强制识别为文本,无视之前单元格格式的设定。

这个半角单引号的特点是只在编辑栏显示但单元格内不显示。

这个字符的存在不影响字符串匹配(除了数据类型差异)但是总有强迫症患者问怎么清除这个字符,已经解释了这字符属于特殊格式设定。

因此不能使用字符的处理方式,需要使用格式的方式:

找个空单元格把格式用格式刷刷过来,或者使用开始菜单下右侧编辑部分的清除格式功能清除这个字符。

8c490edf3e6021e3773d6a14a591d2a7.png

另外一类不属于不可见字符但经常混为一谈的东西为空文本,即假空。

假空是和真空(单元格)相对的,共同点是使用len函数对这个单元格计算字符数时结果都是0(0字符)。

假空多由于公式结果或者软件导出造成,虽然len函数的字符计算结果也是0,但无法被定位-空值的定位操作定位到相应单元格。

假空在公式里以""表示,因此本质还是文本,虽然无法用len函数检测出来,但是可以用istext或者isblank等函数检查出来与真空的差异。

注意countblank函数不区分真空与假空。

技巧操作里可以使用分列直接点完成方式把假空处理为真空。

或者在查找时查找框什么都不输的方式对查找到的单元格ctrl+A全选来定位真空+假空单元格进行定位,用于后续处理(选中后右键清除内容即可把全部假空单元格处理为真空)。

79b7d4ed6695d7b2b335e105235fd331.png

上面这2种不属于字符但经常被混为一谈(因为这2种不能被len函数检查出来)所以先介绍下。

然后我们该聊聊excel里各种影响常规匹配与核对/计算的各种不可见字符了。

1,空格

这是最容易发现的不可见字符吧。

aca34420a8e0f75e9290ca75478e7372.png

肉眼只能看到2个字符但len结果为3,所以存在不可见字符。

空格是占字符宽度的,因此可以在编辑栏内直接选中抹黑发现。

597f467b54135373973aecfb20a40fe4.png

code函数对空格返回的字符编码结果为32,可以用这个函数快速定性,清除方式可以直接替换为空(什么都不输)。

函数处理如果为两侧空格可以用trim函数快速清除(这函数不能清除中间作为间隔符的空格,中间的要用substititute+char(32)清除。

(记住trim函数只能清除2个字符:空格与其全角形式(char(32)与char(41377)))。

2,非打印字符

这几个字符里大家比较熟悉的是char(10)换行符。属于常见的非打印字符,但对新手来说这些字符比空格相对隐蔽,因为像char(9)这字符在单元格内是不占宽度的,无法直接使用抹黑方式检查。

江湖上有一招叫照妖镜就是针对这类性质,即把字符串复制粘贴在记事本或者word将字符现行,再复制粘贴进行替换清除。

a580adec819cfe011eab1a5f0f1c3ddc.png

粘在记事本里能发现存在多余字符。

fdc3e85a8cfb5ad1edb05ef6ff655c0d.png

非打印字符可以使用分列功能清除,函数里通常使用clean函数直接清除这部分字符。

c4decb6b262643e64171096b4b3eee46.png

然而clean的清除能力是有限的,只能清除code结果为char(1-31,128)合计32个字符,。

如果用unicode函数则结果为unichar(1-31,128-159[这31个在中文语言下code的结果是0])范围合计63个字符。

综上所述,其实trim和clean的清除能力其实很有限(不可否认能清除的都是不可见字符类型里的常见字符)。

还有很多字符是这2个函数清除不了的,最典型的是unichar(160),这个字符在微软的trim函数帮助内有提及,不间断空格字符,常见于网页。

在单元格中的性质和空格很相似但无法用trim清除,这个字符的快速清除方式为直接复制后替换为空(什么都不输)清除。

这个字符对新手来说最大的误区在于用code函数获取的编码值为63,但不能使用substitute+char(63)清除。

而code结果为63的不可见字符,是新手最容易出现的误区,也是这篇文章的重点内容。

3,code结果为63的不可见字符

由于早期版本函数code与char的不完全逆运算以及使用的字符集数量有限,。code函数会把所有不识别的字符全部默认为 ? ,因此code结果都是63。

而遍历下来code结果为63的字符大约有108万+个(你没看错数字,code结果不为63的字符只有3万+)。因此使用clean与trim都无法清除的不可见字符,通常code结果都是63。

如果该字符类似空格在单元格内有宽度,可以直接复制替换清除。

如果类似char(9)的性质,无法抹黑发现,通常准确的清除方式为使用unicode函数获取对应编码后使用unichar+substitute函数清除。

关于这部分网上也有很多代码,但测试下都没有能100%清除干净的,和代码本身无关,重点是要有全部的不可见字符编码表,但这个会涉及到很多环境因素影响,例如字体等都会影响某些字符的可见性)。

ba16f71cd47cbf6ed053315a3124dced.png

因此如果在不可见字符规则不规范的情况下处理这类字符的最准确方式为确认对应unicode编码后使用函数/vba/pq等替换/移除来清除。

此类不可见字符里最危险的字符为unichar(8204),unichar(8205)等等。

因为这批字符有几个特殊性质:

868fcf5bca2cdb27ba51205c0d0d0417.png

1,code结果为63。

2,单元格内无宽度。

3,在记事本与word里也不会现行。

4,trim与clean函数不能清除。

5,这些字符虽然占字符数但在用等号判断时不影响结果(图里紫色的公式)。

这类字符最大的特性在于第5条,excel里只有3709个字符有此性质(365版本下有老师测试过结果为2000+)。

这个判断性质对于新手极其容易造成核对时出现错误。

4,新版本,新工具

4.1 pq的不可见字符清除

上面介绍的是各种不可见字符与其清除方式。大家可以看到直到2013版本出现unichar与unicode函数后这种问题才能有效准确解决,。

然而除了这2个新函数,高版本的新工具在一定程度上也能有效处理这类问题。Power query 内的转换-文本列-格式内有2个功能(修整,清除)(对应Text.Trim和Text.Clean2个m函数)。

6c4234e600f9fb5d24ded5656a7ee369.png

其中清除(Text.Clean)能力和工作表函数clean能力一致。

但Text.Trim能清除的字符比工作表函数trim多太多了(注意是两侧的)。

4f434290888711ae90d0ef9612fe30de.png

这说明微软一直知道某些不可见字符处理的常见坑但是在工作表函数范畴一直没解决,在pq里才有一定程度得处理(注意还是不能清除上述最特殊的unichar(8204)等字符)。

可以使用Text.Remove+Character.FromNumber 清除。

4.2,应用商店

2016自带的应用商店里有不少实用小工具,如XLTools.net Data Cleaning,专司清除和转换字符的数据类型。

测试下能清除unichar(160)等不可见字符,当然还是不是万能的,但是操作不难,适合新手使用,重点是上述最危险的unichar(8204)这种字符也能被直接清除。

调用方式为2016的插入-加载项的应用商店里搜索或在分类中找到该工具添加,在”我的加载项”内调用。

63c4f0f1ca77f669b947db215c1fd146.png

调用后excel界面右侧出现对应菜单。

b13248d8e1fc04f97ddaad93fe7c31ab.png

Step 1选取处理区域,step2选择要清除的不可见字符类型(两端空格,不相干的干扰字符,换行符,非打印字符等等)。

虽然极少数偏僻字符也不能处理,但已经能把绝大多数干扰字符清洗干净了(测试下能清除8000+个字符)。

这就是高版本带来的好处,低版本难以实现的问题我们经常可以借助高版本的新工具快速解决了。

今天的内容对于部分小伙伴来说可能有点生疏,但是如果你经常处理从网上下载或是从系统导出的数据,这些内容一定会帮到你。

图文作者:流浪铁匠

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同为Chromium浏览器,Edge却被“特别关照”

谷歌会在 Microsoft Edge 用户访问 Chrome Web Store(Chrome 网上应用商店) 时发去一条通知提醒,建议用户切换到 Google Chrome 以安全地使用扩展程序,通知还提供了下载 Google Chrome 的链接。不过有趣的是,其他 Chro…

噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...

第一期《声学分享客--噪声与振动控制篇》将于今日上午10:00~11:00,在线直播,欢迎各位上线交流。主讲人:苏宏兵报告内容:大型隔振工程案例介绍报告人介绍:苏宏兵,工学硕士&#xff0c…

微软推出全新的Windows 10系统图标

微软已开始通过 Fast Ring 向 Insider 用户推出新的 Windows 10 系统图标,这些新图标基于 Fluent 设计。更改从邮件和日历等程序开始,微软将陆续推出更多彩色图标。这些图标将在接下来的几个月中通过 Microsoft Store 的应用更新和 Windows 10 的发布预览…

.NET Core开发实战(第9课:命令行配置提供程序)--学习笔记

09 | 命令行配置提供程序:最简单快捷的配置注入方法这一节讲解如何使用命令行参数来作为配置数据源命令行配置(提供程序的)支持三种格式的命令1、无前缀的 keyvalue 模式2、双中横线模式 --keyvalue 或 --key value3、正横杠模式 /keyvalue 或…

gRPC in ASP.NET Core 3.x - gRPC 消息定义

之前写了几篇关于 Protoco Buffer 的文章。gRPC in ASP.NET Core 3.x - gRPC 简介(1)gRPC in ASP.NET Core 3.x - gRPC 简介(2)当gRPC使用Protocol Buffer作为传输协议的时候,Protocol Buffer里所有的规则仍然都适用。…

10个用于C#.NET开发的基本调试工具

在调试软件时,工具非常重要。获取正确的工具,然后再调试时提取正确的信息。根据获取的正确的错误信息,可以找到问题的根源所在。找到问题根源所在,你就能够解决该错误了。你将看到我认为最基本的解决在C# .NET 中错误问题的工具的…

[蓝桥杯2015初赛]移动距离

题目描述 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。 其楼房的编号为1,2,3… 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 …

最长公共子序列-dp

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” …

将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1

目录前言Microsoft.AspNetCore.Mvc.ViewFeatures.Internal 消失了升级到 ASP.NET Core 3.1项目文件(.csproj)Program.csStartup.csViewBag 与 Razor Pages 第一次接触ViewBag 与 Razor Pages 第二次接触小结(文件更改对比图)ASP.N…

WTM系列视频教程:View和Taghelper

文字摘要:“又到了老刘胡说的时间了,今天我们主要聊一下View和TagHelper。在前后端不分离的模式下,View还是很重的一块。”“前几课有朋友反馈说收获很大,也有朋友反应基础内容太多,众口难调啊。这个系列教程还是希望有…

sketch里的ios控件_30个让你眼前一亮的iOS Swift UI控件!

前言笔者接触 iOS 开发有一段时间了,尤其特别喜欢UI部分,特意收集整理了30个让你惊艳的第三方开源控件(swift),无论是应用到项目中还是用来学习都能让你大呼过瘾,废话不多说,直接上图上链接&…

Magicodes.IE基础教程之导出Pdf

说明本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出要点导出PDF数据自定义PDF模板导出单据如何批量导出单据导出特性说明PdfExporterAttributePdfExporterAttribute特性用于设置Pdf导出的总体设置,比如方向、纸张等。主要包含如下设置:Name:文档…

mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?

作者:不才陈某前言在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗?假设你要查询城市是苏州的所有人名字,并且按照姓名进行排序返回前 1000 个人的姓名、年龄…

排序-总结

排序 排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列 分为: A.内部排序: 排序过程在内存中进行 B.外部排序: 待排序记录数据量过大,需要借助外部存储设备 排序的稳定性:排序后有相同关键字的记录顺序不变就是稳定的排序 插入类排序: 1.直接插入排…

.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记

10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径环境变量的配置提供程序主要适应场景:1、在 Docker 中运行时2、在 Kubernetes 中运行时3、需要设置 ASP.NET Core 的一些内置特殊配置时环境变量和命令行这两个提供程序在早期是没有容器化的&…