C++ 是否可以使用“多个”;字符集“;在VisualStudio2010项目中?
如您所知,在visual studio 2010(c++)中,我们有noset、unicode和MBCS字符集,我们可以通过菜单或预处理器指令(如#define#unicode)进行设置。 我正在做一个项目,它有一个使用MBCS字符集生成信息的文件(实际上它解析一个html文件!),项目中的其他文件通过unicode字符集支持assian语言。我通过为文件添加#define(MBCS)和为主文件添加#define(UNICODE)来测试它,但收到一些编译器错误。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)来测试它,但收到一些编译器错误。 现在有什么办法解决这个问题了吗?
现在有什么办法解决这个问题了吗?LPCTSTR是指向TCHAR(字符串)的指针。它映射到LPWSTR(宽字符字符串)或LPCSTR(ansi字符串),具体取决于是否设置了
\u UNICODE
或UNICODE
定义。所有这些TCHAR都是Windows9X时代的遗留物,当时早期版本的Windows API中没有Unicode支持,但开发人员希望同时针对NT和9x进行编译。到目前为止,所有这些都应该被弃用
我的建议是:去掉所有的TCHAR代码,在使用ANSI和UNICODE字符串时要明确
您得到的错误是什么?@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文件的源代码。我想我必须再试一次!