zl程序教程

您现在的位置是:首页 >  其它

当前栏目

一个由两个长的如此相像的字引起的问题

一个 两个 如此 引起 问题
2023-09-14 09:10:49 时间

        之前测试同事打过一个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 );