Как получить кодировку со страницы HTML - PullRequest
0 голосов
/ 05 октября 2008

Я пытаюсь получить атрибут charset в любом метатеге HTML. (То есть. < meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >) Есть ли способ сделать это в C ++ под Linux. Я использовал HTML tidy в качестве парсера, но я не могу заставить этот атрибут вернуть мне что-то отличное от us-ascii (даже если кодировка utf-8)
это вывод, который я получил: *. * 4 Узел: мета
Имя атрибута: http-эквивалент
Значение attr: Content-Type
Название attr: content
Значение attr: text / html; Charset = US-ASCII

1 Ответ

1 голос
/ 05 октября 2008

В соответствии с запросом Винко Врсаловича, вот код, который дает такой результат:
void dumpNode (TidyNode tnod, int indent)
{
TidyNode child;

for (child = tidyGetChild (tnod); child; child = tidyGetNext (child))
{
имя ctmbstr;
switch (tidyNodeGetType (child))
{
case TidyNode_Root: name = "Root"; перерыв;
case TidyNode_DocType: name = "DOCTYPE"; перерыв;
case TidyNode_Comment: name = "Комментарий"; перерыв;
case TidyNode_ProcIns: name = "Инструкция обработки"; перерыв;
case TidyNode_Text: name = "Текст"; перерыв;
case TidyNode_CDATA: name = "CDATA"; перерыв;
case TidyNode_Section: name = "Раздел XML"; перерыв;
case TidyNode_Asp: name = "ASP"; перерыв;
case TidyNode_Jste: name = "JSTE"; перерыв;
case TidyNode_Php: name = "PHP"; перерыв;
case TidyNode_XmlDecl: name = "Декларация XML"; перерыв;

case TidyNode_Start:
case TidyNode_End:
case TidyNode_StartEnd:
по умолчанию:
name = tidyNodeGetName (child);
TidyAttr att = tidyAttrFirst (child);
while (att)
{
std :: cout <<"Имя attr:" << tidyAttrName (att) << std :: endl; <br> std :: cout <<"Значение attr:" << tidyAttrValue (att) << std :: endl; <br> att = tidyAttrNext (att);
}
перерыв;
}
assert (имя! = NULL);
printf ("% d *. *% d% sNode:% s \ n", отступ, отступ, "", имя);
dumpNode (дочерний, отступ + 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 (& output);
tidyBufInit (& errbuf);

TidyDoc tdoc = tidyCreate ();
ok = tidyOptSetBool (tdoc, TidyXhtmlOut, да); // Преобразовать в XHTML
если (хорошо)
rc = tidySetErrorBuffer (tdoc, & errbuf); // Захват диагностики
if (rc> = 0)
rc = tidyParseFile (tdoc, "fuebuena.html"); // Разбор ввода
if (rc> = 0)
rc = tidyCleanAndRepair (tdoc); // Убери это!
if (rc> = 0)
dumpHtml (Tdoc);

возврат 0;
}

...