快来偶遇多胞胎姐妹
背景
日前在开发一个公共服务接口,遇到一个灵异事件:
前提:“同一个参数”;
>>> me = 'a b'
>>> user = 'a b'
>>>
自测顺利返回数据;
第三方调用提示没有相关数据。
思考
难道调用的姿势不对? 请求方法、参数条件都满足,PASS
难道调用到其他开发环境接口?Nginx转发、服务环境都正确,PASS
拿到代码版本不同?git log查看,commit id一样,PASS
本着计算机在其他条件恒定情况下相同输入总会得到相同输出的思想。
难道输入不一样?
但它们看起来没有不同。
甄别
首先进行字符串比较
>>> me = 'a b'
>>> user = 'a b'
>>> me == user
False
从字符串比较结果来看,它们只是看起来一样而已。
那么就进行字符比较,找出不同的字符
Python中对字符的甄别提供了一个很好的函数:
>>> ord('a')
97
>>> me = 'a b'
>>> user = 'a b'
>>> me == user
False
>>> [ord(char) for char in me]
[97, 32, 98]
>>> [ord(char) for char in user]
[97, 160, 98]
从中发现,自测使用的空格和第三方使用的空格的Unicode编码是不一样。
从而明白为什么“相同的字符串”传递给同一个接口得到的结果却截然不同。
总结
有时候不能相信肉眼判断
字符串的判断还是交给程序去判断
坚信自己的思想:同样的输入就意味着同样的输出
其实,空格存在许多姐妹,具体自己去搜索了解吧
学海无涯,RidingRoad Always on the Road
评论