一个由两个长的如此相像的字引起的问题
2014-03-21 23:04
302 查看
之前测试同事打过一个bug:对于人员列表的关键字搜索功能,有个非常奇怪的问题,几乎所有的人员的中文名都能搜到对应的人,就只有某一个人员的名字有问题。这个名字叫“禇XXXX”,由于问题是必现的,觉着相对要好查的多。结果通过调试傻眼了,界面上显示文字是一样的,但是从内存里看,同一个字的Unicode编码竟然是不同的。百思不得其解,于是怀疑是不是服务器侧传过来的字符编码有问题,但是为什么除了这个名字外,其他的都是正常的呢?
这个问题太诡异了,于是找负责对应模块的同事过来一起看了一下。查看调试时,同事同样也感觉很迷惑。于是建议写个测试程序,将内存中编码一起打印到界面来看看是否一样。结果用测试展现测试结果时,经仔细辨别,发现两个字略有一点点不一样。于是用抓图工具抓取了图片,放大了图片后发现打印出来的两个字确实不一样。于是想到是不是两个字拼音都是“chu”,于是用Sogou输入法验证了一下,确实存在两个十分相近的字:禇、褚(后者比前者多一点)。原因找到了:人员列表中的chu是前者,而我们输入的关键字是后者,所以匹配不上。
相关的测试如下所示:
这个问题太诡异了,于是找负责对应模块的同事过来一起看了一下。查看调试时,同事同样也感觉很迷惑。于是建议写个测试程序,将内存中编码一起打印到界面来看看是否一样。结果用测试展现测试结果时,经仔细辨别,发现两个字略有一点点不一样。于是用抓图工具抓取了图片,放大了图片后发现打印出来的两个字确实不一样。于是想到是不是两个字拼音都是“chu”,于是用Sogou输入法验证了一下,确实存在两个十分相近的字:禇、褚(后者比前者多一点)。原因找到了:人员列表中的chu是前者,而我们输入的关键字是后者,所以匹配不上。
相关的测试如下所示:
TCHAR achTest1[20] = { 0x7987, 0 }; TCHAR achTest2[20] = { 0x891a, 0 }; CString strTest; strTest.Format( _T("7987: %s, 891a:%s"), achTest1, achTest2 ); AfxMessageBox( strTest );
相关文章推荐
- 我用tcpdump对两个机器之间的通信进行抓包, 发现一个奇怪的问题
- 项目中遇到实际问题,两个数组接收一个数组中的值,分别对应奇数位和偶数位
- 由三目运算符 == ? : 引起的一个问题,醉了,基础不过关。记录一下,比较简单的一个问题,只是为了记录一下
- 解决IIS cpu100%的一个问题,有瑕疵的正则表达式可能会引起.net的死循环
- tomcat部署两个项目只有一个启动问题
- tomcat启动之后,一个项目由两个线程启动的问题
- 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免
- Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题
- 关于java多线程中同步的问题(两个线程访问同一个实例类的两个同步方法,会不会互相影响)
- 用两个栈实现一个队列的问题
- [c] 段错误(core dump): 一个格式化输出引起的问题
- 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
- 一个隐式转换引起的性能故障问题的解决过程
- 一个WCF问题引起的反思
- WORD2007打开两个或多个只能显示一个的问题
- 误删一个用户 引起数据不准确问题
- 一个数字划分成两个之差最小的数组问题
- 火狐、谷歌浏览器,页面中两个iframe 只显示一个的问题
- 一个sql引起的丢表问题
- 两个BUG 一个是linq to sql 并发问题一个是跨年问题