【问题标题】:How to get IHTMLDocument2 ->get_body ->get_innerHTML into a lowercase string?如何将 IHTMLDocument2 ->get_body ->get_innerHTML 转换为小写字符串?
【发布时间】:2011-05-19 13:36:48
【问题描述】:

我正在尝试从 c++ 上的网页正文中获取 innerHTML,到目前为止我有这个:

// I get "Document" from a parameter when calling this code
BSTR bstrContent = NULL;
IHTMLElement *p = 0;
Document->get_body( &p );

if( p )
{
    p->get_innerHTML( &bstrContent );
    p->Release();
}

现在我需要将 bstrContent 转为小写的 std::string 或 LPSTR,我试过这个:

LPSTR pagecontent = NULL;

int responseLength = (int)wcslen(bstrContent);
pagecontent = new CHAR[ responseLength + 1 ];
wcstombs( pagecontent, bstrContent, responseLength);

但是“pagecontent”并不总是包含完整的innerHTML,只有第一个块。即使它有效,我也不知道如何轻松地将其全部变为小写,使用 std::string 我会使用“transform”+“tolower”来做到这一点。

那么,如何将 bstrContent 转换为 std::string?

【问题讨论】:

    标签: c++ visual-c++ string lowercase


    【解决方案1】:

    我不确定我是否完全理解您的问题。我不知道为什么 get_innerHTML 会给你一个不完整的正文,但你可以将 BSTR 转换为 std::string (假设你不需要支持 unicode,在这种情况下你应该使用 std ::wstring 无论如何)使用以下页面上的函数:

    http://www.codeguru.com/forum/showthread.php?t=275978

    如果您使用 ATL,还有 CA2W 转换实用程序,但我链接到的功能更好,因为它至少支持 UTF8(如果相关)。

    希望对你有帮助,

    • 出租车

    【讨论】:

      【解决方案2】:

      std::transform 如果你有一个起始指针和一个结束指针,也可以正常工作。它适用于任何作为序列迭代器的行为(常规指针符合条件)。

      【讨论】:

        猜你喜欢
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-13
        • 2011-01-16
        • 2014-06-05
        • 2012-03-28
        相关资源
        最近更新 更多