#define MAXBLOCKSIZE 40960
string utf8_to_gbk(const char* utf8)
{
if (!utf8) return "";
wchar_t* widechar = NULL;
char* multibyte = NULL;
int length = 0;
length = ::MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
if (length <= 0) return "";
widechar = new wchar_t[length];
::MultiByteToWideChar(CP_UTF8, 0, utf8, -1, widechar, length);
length = ::WideCharToMultiByte(CP_ACP, 0, widechar, -1, NULL, 0, NULL, NULL);
if (length <= 0) { delete[] widechar; return ""; }
multibyte = new char[length];
::WideCharToMultiByte(CP_ACP, 0, widechar, -1, multibyte, length, NULL, NULL);
delete[] widechar;
std::string gbk(multibyte);
delete[] multibyte;
return gbk;
}
CString InternetReadFileFromTM(CString strUrl,bool convert /* = true */ )
{
if (strUrl.IsEmpty())
return false;
HINTERNET hSession = InternetOpen("RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hSession == NULL)
return false;
HINTERNET handle2 = InternetOpenUrl(hSession, strUrl, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
if (!handle2)
{
handle2 = InternetOpenUrl(hSession, strUrl, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
if (!handle2)
{
DWORD error = GetLastError();
char buff[1024] = {0};
DWORD length = 0;
InternetGetLastResponseInfo(&error, buff, &length);
return false;
}
}
char czBuffer[MAXBLOCKSIZE];
memset(czBuffer, 0, MAXBLOCKSIZE);
ULONG Number = 1;
//FILE *stream;
int iFlag = 0;
CString str = "";
while (Number > 0)
{
memset(czBuffer, 0, MAXBLOCKSIZE);
if (!InternetReadFile(handle2, czBuffer, MAXBLOCKSIZE - 1, &Number))
{
InternetReadFile(handle2, czBuffer, MAXBLOCKSIZE - 1, &Number);
}
if (Number > 0 )
{
if (convert)
{
if (Number < MAXBLOCKSIZE)
{
czBuffer[Number] = '\0';
}
std::string temp = utf8_to_gbk(czBuffer);
str += temp.c_str();
str.Replace('\n', ' ');
}
else
{
str += czBuffer;
}
}
str.Replace("\\u201c", "");
str.Replace("\\u201d", "");
str.Replace("'", "");
//fwrite(czBuffer, sizeof(char), Number, stream);
if (Number != 0)
{
iFlag = 1;
}
}
InternetCloseHandle(handle2);
handle2 = NULL;
InternetCloseHandle(hSession);
hSession = NULL;
return str;
}