Cstring/_bstr_/A2W unicode转换存在的安全隐患问题
本人前段时间曾遇到界面乱码问题,
原因是程序中利用类Cstring,_bstr_等进行多字节到unicode的转换.
比如: char * pi = "简体中文936";
转换成unicode界面输出
pWin->SetWindowText(CString(pi));
_bstr_ bs = pi;
wstring wsz = A2W(pi);
这些转换在中文环境下没有任何问题,不管是显式的转换还是隐式的转换.
即使在英文操作系统里,通过设置语言区域等等,也没有问题.
但在英文系统中,不能设置系统的语言区域等等情况下,如何能使得
CString(pi);
_bstr_ bs = pi;
wstring wsz = A2W(pi);
能正常转换?
api里面有setlocale,_setmbcp等函数,无论我在程序里怎么改变区域,语言,代码页都没有用,以上转换都是乱码.
可能我这几个函数用得不对,希望有经验的高手指教一二.
本来想忽视这个问题,无奈程序里这样的转换太多,不得不重视起来.