vc6 unicode编码

    技术2025-09-22  37

    VC6默认建立的工程是ANSI模式,ANSI模式在繁体中文系统中会出现乱码,需要将ANSI版程序转换成UNICODE

    1. 添加 UNICODE 和 _UNICODE 预处理定义

    位置:Project Settings -> C/C++ -> Preprocessor definitions

    添加了这两个定义后,MFC的一些内置类型如 TCHAR、CString 都将转为支持宽字符类型(wchar_t)

    2. 使用宽字符相关类型,如:

    char -> TCHAR、char * -> LPTSTR、const char * -> LPCTSTR

    3. 对字符串常量使用 _T() 宏

    4. 替换C库中的中字符串操作函数,如 strlen -> _tcslen、strcmp -> _tcscmp 等

    类似的还有C库中字符串与数字的转换函数,如 atoi -> _ttoi、itoa -> _itot 等

    5. 将 Project Settings -> Link -> Output -> Entry Point 设为 wWinMainCRTSTartup

    否则会有如下错误:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16

    6. C++标准库中的string,有对应的宽字符版本wstring,两者均为basic_string的特化版本

    可在StdAfx.h中:

    #ifdef _UNICODE#define tstring wstring#else#define tstring string#endif

    然后在代码中使用 tstring 即可,类似的还有 fstream/wfstream、ofstream/wofstream 等

    7. 宽字符版本的英文字符仍可直接与整型值进行比较,如:

    CString s = _T("ABC");ASSERT(s[0] == 'A');

    8. 对于仍需使用ANSI字符串的地方,如第三方类库的接口,仍可继续使用;如需进行Unicode字符串和ANSI字符串的互转换,可使用 MultiByteToWideChar 和 WideCharToMultiByte

    最新回复(0)