【问题标题】:SetWindowText show Unrecognizable Code from InternetReadFile()SetWindowText 显示来自 InternetReadFile() 的无法识别的代码
【发布时间】:2011-06-22 08:20:31
【问题描述】:

我想将使用 InternetReadFile 下载的 utf-8 编码网页源代码转换为 windows 可以识别的 utf-16。

这里是sn-p的代码:

HINTERNET hConnect,hSession;
char *szBuffer = malloc(WEBSOURCE_SIZE);
wchar_t *wszBuffer = (wchar_t *)malloc(WEBSOURCE_SIZE);
TCHAR szStr[100];
DWORD dwSize=0;
DWORD dwDownloaded;
if(szBuffer == NULL)
{
    MessageBox(hwndGetBtn,TEXT("error"),TEXT("Error"),MB_ICONHAND);
}
GetWindowText(hwndUrlEdt,szStr,sizeof(szStr)/sizeof(TCHAR));
hSession = InternetOpen(TEXT("testWinINet"), PRE_CONFIG_INTERNET_ACCESS, NULL, INTERNET_INVALID_PORT_NUMBER, 0);
hConnect = InternetOpenUrl(hSession,szStr,NULL,0,INTERNET_FLAG_DONT_CACHE,0);
ZeroMemory(szBuffer,WEBSOURCE_SIZE);
while (InternetReadFile(hConnect,szBuffer,WEBSOURCE_SIZE,&dwDownloaded))
{
    if (0==dwDownloaded) break;
    szBuffer[dwDownloaded]=0;
}
len=MultiByteToWideChar(CP_UTF8,0,szBuffer,-1,NULL,0);
MultiByteToWideChar(CP_UTF8,0,szBuffer,-1,wszBuffer,sizeof(wszBuffer));

SetWindowText(hwndShowEdt,wszBuffer);

当网页是 utf-8 编码时,hwndShowEdt 编辑框总是显示无法识别的代码。

那么任何人都可以找到我的代码的错误吗?

【问题讨论】:

  • sizeof(wszBuffer) 是错误的。循环没有意义,您只存储最后一个块。没有你使用 len 的迹象。
  • @hans-passant len 未使用,如何修改代码并使其工作?

标签: c utf-8 utf-16 winapi


【解决方案1】:

网页的字符集只能被 HTML meta 标签识别:

<meta http-equiv="Content-Type" content="text/html;charset=gb2312">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 2020-01-25
    • 2021-10-29
    相关资源
    最近更新 更多