C++ 是否可以使用“多个”;字符集“;在VisualStudio2010项目中?

C++ 是否可以使用“多个”;字符集“;在VisualStudio2010项目中?,c++,visual-studio,visual-studio-2010,unicode,C++,Visual Studio,Visual Studio 2010,Unicode,如您所知,在visual studio 2010(c++)中,我们有noset、unicode和MBCS字符集,我们可以通过菜单或预处理器指令(如#define#unicode)进行设置。 我正在做一个项目,它有一个使用MBCS字符集生成信息的文件(实际上它解析一个html文件!),项目中的其他文件通过unicode字符集支持assian语言。我通过为文件添加#define(MBCS)和为主文件添加#define(UNICODE)来测试它,但收到一些编译器错误。 现在有什么办法解决这个问题了吗?

如您所知,在visual studio 2010(c++)中,我们有noset、unicode和MBCS字符集,我们可以通过菜单或预处理器指令(如#define#unicode)进行设置。 我正在做一个项目,它有一个使用MBCS字符集生成信息的文件(实际上它解析一个html文件!),项目中的其他文件通过unicode字符集支持assian语言。我通过为文件添加#define(MBCS)和为主文件添加#define(UNICODE)来测试它,但收到一些编译器错误。
现在有什么办法解决这个问题了吗?

LPCTSTR是指向TCHAR(字符串)的指针。它映射到LPWSTR(宽字符字符串)或LPCSTR(ansi字符串),具体取决于是否设置了
\u UNICODE
UNICODE
定义。所有这些TCHAR都是Windows9X时代的遗留物,当时早期版本的Windows API中没有Unicode支持,但开发人员希望同时针对NT和9x进行编译。到目前为止,所有这些都应该被弃用

我的建议是:去掉所有的TCHAR代码,在使用ANSI和UNICODE字符串时要明确

  • 将所有项目设置转换为Unicode

  • 将所有LPTSTR、LPCTSTR、TCHAR、变量显式转换为LPWSTR、LPCWSTR或WCHAR。或者在显式处理ANSI字符串时:LPSTR(char*)、LPCSTR(const char*)或char(char)

  • 在调用Win32 API时要明确。当您想要处理ANSI字符串(例如CreateWindowA与CreateWindowW)时,请使用“A”版本的API

  • 他们是你的朋友


  • 您得到的错误是什么?@ivan当然还有。例如:atlconv.h(776):错误C2440:“return”:无法从“LPCTSTR”转换为“LPCOLESTR”。您是说数据采用不同的字符编码。或者您是说源文件采用不同的字符编码?该文件以字节数组的形式获取html文件。并对其进行分析。如果我使用unicode,我应该将其转换为wchar_t,这很耗时,而且可能不安全。例如,在第3种情况下,文件使用字节pTag[1024];数组或_tcsupr((_TCHAR*)pTag)和_tcscmp((_TCHAR*)pTag,state)和_tcscpy(result,(_TCHAR*)state);函数,使用Unicode会使结果不正确!C运行时函数也是如此。明确使用strcpy/strcmp或
    \u wcscpy/\u wcscmp
    。从.Thanx开始,现有代码是显式强制转换的,这一事实很可怕。那么“BYTE pTempData[FRAME_BUFFER_SIZE];InternetReadFile(hull、pTempData、numberOfBytesToRead和numberOfBytesRead);”函数呢?pTempData包含html文件!我认为将其转换为wchar_t是行不通的!InternetReadFile会将HTML文件的字节复制到字节缓冲区中。InternetRealFile返回后,pTempData中可能会有一组ascii字节。因此,此时您应该以null终止此数组并复制到分配的
    char*
    char[]
    缓冲区。如果要将此字符串转换为Unicode,则由您决定-这取决于您要执行的操作和/或该HTML文件的源代码。我想我必须再试一次!