最近看到一个钓鱼网页,发现了这个字符问题。当你打开网页的时候,就会发现这个网页头部有一行空白,选中它后却是选中空白。。
本身代码中不存在这个字符串。表面上无法删除它。那么肯定是编码问题!有控制符之类的存在。
把所有字符都显示出来,发现没有问题。文件也是utf-8无rom编码!
通过git diff可以发现正确代码和错误代码有区别,但是看上去却没有任何区别!
接下来只能通过二进制比较了,bcompare查看如下:
综述,可以看到这个钓鱼网站的作者肯定是一个三流程序员写的,就像之前同事代码居然都是GBK+UTF8混合编码。。。
一般在java/C++开发中,一个tab=4空格。。
而python中,一个tab=2/4/6...
在html中,为了阅读代码,一个tab=2个空格。这都是约定熟成的。Python比较奇葩,A程序员tab定义为2个,B程序员IDE中tab定义为4个。两者协同开发就会出现下面奇葩问题:
你能数的清楚到底有多少个空格吗?
比如我最近更新mysql到mysql8后,更新了一下用户信息,用到了如下的sql语句:
CREATE USER 'gz'@'%' IDENTIFIED WITH mysql_native_password BY 'my_gz09';
这是一句很简单的sql语句!可执行却出现语法错误!好了,让我们回到Notepad++中看下什么问题吧:
Notepad++双击默认会选择一个单词,可是目前双击却选中了多个单词!说明空格有问题!!那么做一个全局替换即可:
更深入分析一下,我们来查看一下二进制信息:
空格键在UTF8无rom编码中16进制是20。兼容ASCII两个字节编码。但是还有一种” 空格 “16进制为C2A0,采用4个字节编码,兼容UTF8带rom编码。而当我把这串错误的字符串复制到其他编辑器就会自动转换为” ?“,也就出现了错误! 而 ”?“ 在UTF8无rom编码是 3F。
既然知道问题了,以后网页中复制东西,注意空格问题!
博客地址:http://blog.yoqi.me/?p=16342
这篇文章还没有评论