LibXML2 не может правильно прочитать свой собственный формат XML UTF-8

Я хотел бы разобрать XML в формате UTF8 с помощью libXML2. Мой код написан на C, и я использую v2.9.3 из libXML2.

Мой код следует:

    xmlTextReaderPtr reader;
    xmlTextWriterPtr writer;
    writer = xmlNewTextWriterFilename("test.xml", 0);
    xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL);
    xmlTextWriterStartElement(writer, BAD_CAST "node_with_é_character");

    xmlTextWriterEndElement(writer);
    xmlTextWriterEndDocument(writer);
    xmlFreeTextWriter(writer);
    reader = xmlReaderForFile("test.xml", "UTF-8", XML_PARSE_RECOVER);

    int ret = 1;
     while (ret == 1) {
         const xmlChar *nameT = xmlTextReaderConstName(reader);

         printf("\n   ---> %s\n",nameT);
         ret = xmlTextReaderRead(reader);
    }

Выход:

   ---> (null)

   ---> node_with_é_character

Проблема заключается в трассировке "node_with_Ã ©_character", а не "node_with_é_character"

Моя командная строка - "chcp 1252" set.

Я не понимаю, почему liXML2 не может хранить / читать символ «é».

Вы работаете в Windows, не так ли?

Yann Droneaud 18.07.2018 15:29

Да, я использую Windows с mingw.

cconigli 18.07.2018 16:04

Символ «é» сохраняется с двумя байтами C3 A9. Если эти два байта интерпретируются (декодируются) с помощью Latin-1 или другой подобной кодовой страницы Windows, вместо этого вы получаете «Ã ©». Поэтому я думаю, что ваш код в порядке, но ваш инструмент терминала / командной строки (который получает вывод вашей программы и отображает его) ошибается. Вы должны установить кодировку интерфейса командной строки в UTF-8.

lenz 18.07.2018 20:46
Включение UTF-8 в jsPDF с помощью Angular
Включение UTF-8 в jsPDF с помощью Angular
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей...
0
3
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как указано в комментарии к вашему под Windows, я предполагаю, что, вероятно, ваш исходный код не закодирован в UTF-8, поэтому строка C «node_with_é_character» не закодирована в UTF-8 в вашем исполняемом файле.

Я не знаю интерфейсов libxml2, но пример кода довольно ясен, он ожидает входные параметры в UTF-8. См. http://xmlsoft.org/examples/testWriter.c

/* Write a comment as child of EXAMPLE.
 * Please observe, that the input to the xmlTextWriter functions
 * HAS to be in UTF-8, even if the output XML is encoded
 * in iso-8859-1 */
tmp = ConvertInput("This is a comment with special chars: <\xE4\xF6\xFC>",
                   MY_ENCODING);

Сохраните исходный файл как UTF-8, чтобы решить вашу проблему.

Ты прав. Задайте для командной строки «chcp 65001» и преобразование исходного файла в UTF-8 решило проблему. Спасибо

cconigli 19.07.2018 11:41

Другие вопросы по теме