网址里面有个特殊字符-零宽度
网址里面有个特殊字符%E2%80%8B
所见不一定是所得.
今天终于活久见, 看上去是一样的, 但是实际就是不一样还差一个字符。
那看见下面一个图片,下面一个图片,嗯是返回的一串字符串,我要判断它们相等,肉眼看上去是完全相等的,但是实际上,它们是不相等的,所以在判断相等的时候始终返回嗯 False
。
看上去是2001603
,url编码是2%E2%80%8B001603/
。
到底是什么原因造成的?我把获取到的字符串,通过 ascii
码编码之后。明显的看到有一个错误发生。在 2
这个数字后面。
str(path).split('/')[-1].encode('ascii')=='MAIN_HCP3_AU_ER_G55D_UNIT_DB_2001603'
发现在2这个数字后面,他有一个编码,Unicode编码是 u200b
。通过查询Unicode?可以知道这是一个0宽度的字符串。如果他表现出来就是没有宽度的,肉眼是看不见的。
{UnicodeEncodeError}‘ascii’ codec can’t encode character u’\u200b’ in position 30: ordinal not in range(128)
解决
遇到这种问题怎么去解决?通过python,用python的方法encode去编码,用 assci 编码,然后忽略掉错误就可以了。
str(path).split('/')[-1].encode('ascii', 'ignore')=='MAIN_HCP3_AU_ER_G55D_UNIT_DB_2001603'
其他
那是其他的类似0宽度字符串还有如下几种方式。如果遇到同样的问题,还是用这个方法就可以解决
类似的还有
Unicode code point | character UTF-8 | (hex.) name |
---|---|---|
U+2000 | e2 80 80 | EN QUAD |
U+2001 | e2 80 81 | EM QUAD |
U+2002 | e2 80 82 | EN SPACE |
U+2003 | e2 80 83 | EM SPACE |
U+2004 | e2 80 84 | THREE-PER-EM SPACE |
U+2005 | e2 80 85 | FOUR-PER-EM SPACE |
U+2006 | e2 80 86 | SIX-PER-EM SPACE |
U+2007 | e2 80 87 | FIGURE SPACE |
U+2008 | e2 80 88 | PUNCTUATION SPACE |
U+2009 | e2 80 89 | THIN SPACE |
U+200A | e2 80 8a | HAIR SPACE |
U+200B | e2 80 8b | ZERO WIDTH SPACE |
U+200C | e2 80 8c | ZERO WIDTH NON-JOINER |
U+200D | e2 80 8d | ZERO WIDTH JOINER |
U+200E | e2 80 8e | LEFT-TO-RIGHT MARK |
U+200F | e2 80 8f | RIGHT-TO-LEFT MARK |
https://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128
作者:叉叉敌
博客:https://chasays.github.io/
微信公众号:Chasays, 欢迎关注一起吹牛逼,也可以加个人微信号「xxd_0225」互吹。
本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现