最近在帮公司一个小孩看一个很奇怪的bug,是MFC 的一个小GUI,在客户环境上一个输入框中的数据总是有乱码,导致从数据库中查不出数据。但是奇怪的是在我们环境上重现不了,因为我们的测试环境用的是Win XP, 客户环境上用的是Win7(我们一开始就没想到过跟不同的操作系统有关)。最开始我们都是怀疑是code在转换UTF8的时候出的错,可是根据给客户的debug版本否定了我们这种猜测,因为我们发现在转换之前debug打印出来的字符串就已经是错误的了。如下图所示:
奇怪的这个字符串就是直接从界面的输入框中得到。先看一下code吧:
TCHAR szAccountNo[GAL_TICKLER_ACCT_LEVEL_EXTERNAL_ID_LEN];
m_eAccountNo.GetLine(0,szAccountNo, GAL_TICKLER_ACCT_LEVEL_EXTERNAL_ID_LEN );
CString szAcctno= szAccountNo;
szAcctno =ArbI18N::translateToUTF8(szAcctno);
我们在调用translateToUTF8之前加了一处debug信息,就是上图显示的account_no的字符串,这时它已经是有乱码的了,也就是说字符串从GetLine()这个函数获得结果就是含有乱码的。这个