LINUX.ORG.RU

Правильнее это делать не в libxml, а в libxml2.

А что ты имеешь в виду под "обрабатывать"? Можно конкретнее сформулировать задачу?

anonymous
()

pkg-config libxml-2.0 --modversion
2.5.1
Имею XML файл с русскими строчками.
Что надо писать в атрибуте encoding в XML файле?
При получении значания русского атрибута функцией xmlGetProp
получаю нечитабильное значение предполагаю что это юникод.
Как правильно прочитать? Если можно пример чтения атрибута и вывод его
на экран функцией printf...

anonymous
()

А и правда херня какая-то получается:

----- test.xml
<?xml version="1.0" encoding="koi8-r"?>
<Document property="Привет, мир!"/>
----- test.xml всё

----- test.c

#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    xmlDocPtr doc;
    xmlNodePtr cur;
    xmlChar* val;

    doc = xmlParseFile("test.xml");
    cur = xmlDocGetRootElement(doc);

    val = xmlGetProp(cur, (const xmlChar*) "property");

    printf("%s\n", val);

    return 0;

}
----- test.c всё

компилируем:
cc -I/usr/include/libxml2 -o test test.c -lxml2

и видим:

bash-2.05a$ ./test
п÷я─п?п╡п╣я┌, п?п?я─!

Нет времени щас разбираться, но ты не один в беде :)

anonymous
()

Имхо, тебе просто возвертается utf-8 либо кой-нить другой unicode. Судя по назойливым "п" через символ...

С уважением -- Смоляное Чучелко

anonymous
()

Б###ь
В этой конфе или все ленивые или никто нехрнена не шарит!!!!
Поэтом уотвечаю себе сам...
----- test.xml
<?xml version="1.0" encoding="koi8-r"?>
<Document property="Привет, мир!"/>
----- test.xml всё

----- test.c
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <locale.h>
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
     xmlDocPtr doc;
     xmlNodePtr cur;
     xmlChar* val;
     
     gsize i;
     gsize j;
     G_CONST_RETURN char *charset;

     setlocale(LC_ALL,"ru_RU.KOI8-R");

     g_get_charset(&charset);
     printf("%s\n",charset);

     doc = xmlParseFile("test.xml");
     cur = xmlDocGetRootElement(doc);
     
     val = xmlGetProp(cur, (const xmlChar*) "property");
     g_print(val);
     g_print("\n");
     printf("%s\n", g_locale_from_utf8(val,-1,&j,&i,NULL));
     printf("%i %i\n",i,j);
     
     return 0;
    
}
----- test.c всё

компилируем:
cc `pkg-config libxml-2.0 glib-2.0 --cflags --libs` ./test.c
$ ./a.out
KOI8-R
Привет, мир!
Привет, мир!
12 21

Надеюсь понятно...
Если юзаем GTK+ там есть функция
gchar* gtk_set_locale(void);
вызывается из void gtk_init(int *argc, char ***argv);

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.