我正在尝试获取任何 HTML 元标记中的字符集属性。
(即 < meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
)
有什么办法可以在 linux 下的 C++ 中做到这一点。我使用 HTML tidy 作为解析器,但我无法获得该属性返回任何与 us-ascii 不同的东西(即使编码是 utf-8)
这是我得到的输出:
*.*4 节点:元
名称属性:http-equiv
值属性:Content-Type
名称属性:内容
值属性:text/html; charset=us-ascii
最佳答案
根据 Vinko Vrsalovic 的要求,这里是获得该结果的代码:
void dumpNode(TidyNode tnod, int indent)
{
TidyNode 子节点;
对于 ( child = tidyGetChild(tnod); child; child = tidyGetNext(child) )
{
ctmbstr 名称;
切换 ( tidyNodeGetType(child) )
{
case TidyNode_Root: name = "Root";打破;
case TidyNode_DocType: name = "DOCTYPE";打破;
case TidyNode_Comment: name = "评论";打破;
case TidyNode_ProcIns: name = "处理指令";打破;
case TidyNode_Text: name = "文本";打破;
案例TidyNode_CDATA:名称=“CDATA”;打破;
case TidyNode_Section: name = "XML Section";打破;
case TidyNode_Asp: name = "ASP";打破;
case TidyNode_Jste: name = "JSTE";打破;
case TidyNode_Php: name = "PHP";打破;
case TidyNode_XmlDecl: name = "XML 声明";打破;
案例 TidyNode_Start:
案例 TidyNode_End:
案例 TidyNode_StartEnd:
默认值:
name = tidyNodeGetName( child );
TidyAttr att = tidyAttrFirst( child );
而(att)
{
std::cout <<"名称属性:"<< tidyAttrName(att) << std::endl;
std::cout<<"值属性:"<< tidyAttrValue(att) << std::endl;
att = tidyAttrNext(att);
打破;
断言(名称!= NULL);
printf( "%d*.*%d%sNode: %s\n", indent, indent, "", name );
dumpNode( child, indent + 4 );
void dumpHtml(TidyDoc tdoc)
{
dumpNode(tidyGetHtml(tdoc),0);
int main(int argc, char **argv) {
std::string toReturn("");
TidyBuffer输出;
TidyBuffer errbuf;
int rc = -1;
bool 确定;
tidyBufInit(&output);
tidyBufInit(&errbuf);
TidyDoc tdoc = tidyCreate();
ok = tidyOptSetBool(tdoc, TidyXhtmlOut, 是的);//转换为 XHTML
如果(好)
rc = tidySetErrorBuffer( tdoc, &errbuf );//捕获诊断信息
如果 ( rc >= 0 )
rc = tidyParseFile(tdoc, "fuebuena.html");//解析输入
如果 ( rc >= 0 )
rc = tidyCleanAndRepair( tdoc );//整理一下!
如果 (rc >= 0)
dumpHtml(tdoc);
返回 0;
关于c++ - 如何从 HTML 页面获取字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/170988/