MFC使用Unicode编码
MFC采用Unicode编码的字符时,在编译链接时,就必须用到特殊的参数(还要改变可执行文件执行的入口),必须在每个string前面加上T,将char修改成TCHAR,每个字符串处理函数(strcpy()、strdup()、strcat()等)都要改变成其他的字符串处理函数名。
注意点:支持Unicode的软件不能和不支持Unicode编码的DLL一起工作。
unicode 编码字符举例:
用TCHAR/TCHAR*代替char/char* 及wchar/wchar*
用TEXT("")包装字符串常量,用L包装字符常量。
示例:
TCHAR str[] = TEXT("alantop");
TCHAR c = L'demo';
MessageBox(NULL,TEXT("hello world!"),TEXT("demo"),NULL);
unicode函数举例说明:
//这个是多字节VC工程
strcpy(m_nid.szTip, "多字节示例");
//这个是Unicode VC工程
wcscpy_s(m_nid.szTip, _T("unicode示例"));
注意m_nid.szTip,是一个系统结构体(托盘图标)中一个变量,
它能自动选用多字节或Unicode。这里只是作为一个例子使用。
可以分别用多字节字符数组和Unicode字符数组代替。
例如:
//多字节VC工程示例
char aa[100];
strcpy(aa, "多字节示例");
//Unicode VC工程示例
wchar_t aa[100];
wcscpy_s(aa, _T("unicode示例"));
QT使用unicode编码
Qt中使用unicode编码,QT的字符串用QString类来处理,QString类与生俱来就采用Unicode编码,因而不需要改变任何东西:不需要在编译/链接时增添参数,不需要修改代码,只需要使用QString类即可。QString类功能强大、应用广泛,也不用担心Unicode问题。QString类提供了转换为char *和UTF8的函数。
MFC的CString类和Qt的QString类的不同
MFC的CString类以char *为基础提供的功能很少,它的特点是当需要char *类型时可以直接使用CString类。乍看起来这好像是优点,实质上有很大缺陷,特别是可以直接修改char *内容而不用更新类,在转变为Unicode时会遭遇到很大的麻烦(CString类随编译选项可以是Unicode版)。
相反,QT的QString类在内部以Unicode编码方式来存储字符串,需要时提供char *功能,实际上很少用到char *,因为整个Qt的API用文本的方式响应QString参数。QString还附带了许多其他的功能,比如自动分享QString的内容。Qtstring使用更方便容易。