Я пытаюсь получить атрибут charset в любом метатеге HTML.
(например, < meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >)
Есть ли способ сделать это на С ++ под Linux. Я использовал HTML tidy в качестве парсера, но я не могу заставить этот атрибут возвращать мне что-то отличное от us-ascii (даже если кодировка - utf-8)
, это результат, который я получил:
*. * 4 Узел: meta
Атрибут имени: http-Equ
Атрибут значения: Content-Type
Атрибут имени: content
Атрибут значения: text / html; charset = us-ascii
Вы не думаете, что фреймворк транслируется в us-ascii перед передачей вам узла?





По запросу Винко Врсаловича вот код, который дает такой результат:
void dumpNode (TidyNode tnod, int indent)
{
дочерний узел TidyNode;
для (child = tidyGetChild (tnod); child; child = tidyGetNext (child))
{
ctmbstr имя;
переключатель (tidyNodeGetType (дочерний))
{
case TidyNode_Root: name = "Корень"; перерыв;
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:
чехол TidyNode_End:
case TidyNode_StartEnd:
по умолчанию:
name = tidyNodeGetName (дочерний);
TidyAttr att = tidyAttrFirst (дочерний элемент);
в то время как (att)
{
std :: cout <<"Атрибут имени:" << tidyAttrName (att) << std :: endl;
std :: cout <<"Атрибут значения:" << tidyAttrValue (att) << std :: endl;
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 (& вывод);
tidyBufInit (& errbuf);
TidyDoc tdoc = tidyCreate ();
ok = tidyOptSetBool (tdoc, TidyXhtmlOut, да); // Конвертируем в XHTML
если (в порядке)
rc = tidySetErrorBuffer (tdoc, & errbuf); // Захват диагностики
, если (rc> = 0)
rc = tidyParseFile (tdoc, "fuebuena.html"); // Разбираем input
, если (rc> = 0)
rc = tidyCleanAndRepair (tdoc); // Убери это!
, если (rc> = 0)
dumpHtml (tdoc);
возврат 0;
}
не могли бы вы вставить код? HTML Tidy может точно проверять заголовки типов содержимого