如何从HTML页面获取字符集

时间:2008-10-04 20:59:18

标签: c++ html linux character-encoding content-encoding

我正在尝试在任何HTML元标记中获取charset属性。 (即,< meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >) 有没有办法在Linux下的C ++中做到这一点。我使用HTML整理作为解析器,但我无法获得该属性以返回与us-ascii不同的任何内容(即使编码为utf-8),这是我得到的输出: *。* 4节点:元
名称attr:http-equiv
价值attr:内容类型
姓名attr:内容
值attr:text / html;字符集= US-ASCII

1 个答案:

答案 0 :(得分:1)

根据Vinko Vrsalovic的要求,以下是获得该结果的代码:
void dumpNode(TidyNode tnod,int indent)
{
TidyNode孩子;

for(child = tidyGetChild(tnod); child; child = tidyGetNext(child))
{
ctmbstr name;
switch(tidyNodeGetType(child))
{
case TidyNode_Root:name =“Root”;打破;
case TidyNode_DocType:name =“DOCTYPE”;打破;
case TidyNode_Comment:name =“Comment”;打破;
case TidyNode_ProcIns:name =“Processing Instruction”;打破;
case TidyNode_Text:name =“Text”;打破;
case TidyNode_CDATA:name =“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 Declaration”;打破;

case TidyNode_Start:
case TidyNode_End:
case TidyNode_StartEnd:
默认:
name = tidyNodeGetName(child);
TidyAttr att = tidyAttrFirst(孩子);
而(att)
{
std :: cout&lt; &lt;“Name attr:”&lt;&lt; tidyAttrName(att)&lt;&lt;的std :: ENDL;
的std :: COUT&LT; &lt;“Value attr:”&lt;&lt; tidyAttrValue(att)&lt;&lt;的std :: ENDL;
att = tidyAttrNext(att);
}
打破;
}
assert(name!= NULL);
printf(“%d *。*%d%sNode:%s \ n”,缩进,缩进,“”,名称);
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 ok;

tidyBufInit(&amp; output);
tidyBufInit(安培; errbuf);

TidyDoc tdoc = tidyCreate();
ok = tidyOptSetBool(tdoc,TidyXhtmlOut,yes); //转换为XHTML
if(ok)
rc = tidySetErrorBuffer(tdoc,&amp; errbuf); //捕获诊断信息 if(rc> = 0)
rc = tidyParseFile(tdoc,“fuebuena.html”); //解析输入
if(rc> = 0)
rc = tidyCleanAndRepair(tdoc); //收拾它!
if(rc> = 0)
dumpHtml(tdoc);

返回0;
}