之前测试的同事打过一个bug:对于人员列表的关键字搜索功能,有个非常奇怪的问题,几乎所有的人员的中文名都能搜到对应的人,就只有某一个人员的名字有问题。这个名字叫“禇XXXX”,由于问题是必现的,觉着相对要好查的多。结果通过调试傻眼了,界面上显示文字是一样的,但是从内存里看,同一个字的Unicode编码竟然是不同的。百思不得其解,于是怀疑是不是服务器侧传过来的字符集编码有问题,但是为什么除了这个名字外,其他的都是正常的呢?
这个问题太诡异了,于是找负责对应模块的同事过来一起看看一下。查看调试时,同事同样也感觉很迷惑。于是建议写个测试程序,将内存中编码一起打印到界面来看看是否一样。结果用测试展现测试结果时,经仔细辨别,发现两个字略有一点点不一样。于是用抓图工具抓取了图片,放大了图片后发现打印出来的两个字确实不一样。于是想到是不是两个字拼音都是“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 );
一个由两个长的如此相像的字引起的问题,布布扣,bubuko.com
原文:http://blog.csdn.net/chenlycly/article/details/21748457