Кодировка выходного значения PugiXML

я немного смущен. pugi::xml_node::value() возвращает строку типа chart_t, которая может быть либо wchar_t, либо char, в зависимости от флагов компиляции. В документации к pugiXML сказано, что он работает с разными типами в кодировках семейства utf. OK. Я загружаю с помощью pugi::xml_document::load_file() документ в кодировке uft16. Затем, когда я повторяю узлы throw и вызываю метод value() для каждого узла, в какой кодировке я получу значение? Предположительно в кодировке моих данных, которые я загрузил в xml_document. Значит в utf16. Если в utf16, то я не смогу работать с этим значением, потому что там будут 0-символы и я не смогу использовать strlen, strcpy и т.д... Я сделал такой тест, но все работает отлично. Кто-нибудь знает, как это работает?


person dmigous    schedule 27.05.2013    source источник


Ответы (2)


http://pugixml.googlecode.com/svn/tags/latest/docs/manual/loading.html

http://pugixml.googlecode.com/svn/tags/latest/docs/manual/loading.html#manual.loading.encoding

Вы можете указать кодировку самостоятельно или «наслаждаться» автоматически определенной.

person 43l0v3k    schedule 27.05.2013
comment
Эти ссылки не работают, не могли бы вы опубликовать последнюю рабочую ссылку - person user1; 04.03.2020

Существует два режима компиляции: по умолчанию, когда документ хранит данные в памяти с использованием UTF8 в массивах символов, и режим wchar (PUGIXML_WCHAR_MODE), где данные хранятся в массивах wchar_t с использованием либо UTF16, либо UTF32, в зависимости от sizeof (wchar_t).

Когда вы загружаете или сохраняете документ, pugixml автоматически декодирует входные данные или кодирует выходные данные в кодировке, указанной аргументом 'encoding' для функций загрузки/сохранения.

В вашем случае pugixml автоматически определяет, что входной файл содержит данные UTF16, и декодирует их в UTF8, что вы получаете от value().

person zeuxcg    schedule 28.05.2013