я немного смущен. 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 и т.д... Я сделал такой тест, но все работает отлично. Кто-нибудь знает, как это работает?
Кодировка выходного значения PugiXML
Ответы (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
Вы можете указать кодировку самостоятельно или «наслаждаться» автоматически определенной.
Существует два режима компиляции: по умолчанию, когда документ хранит данные в памяти с использованием UTF8 в массивах символов, и режим wchar (PUGIXML_WCHAR_MODE), где данные хранятся в массивах wchar_t с использованием либо UTF16, либо UTF32, в зависимости от sizeof (wchar_t).
Когда вы загружаете или сохраняете документ, pugixml автоматически декодирует входные данные или кодирует выходные данные в кодировке, указанной аргументом 'encoding' для функций загрузки/сохранения.
В вашем случае pugixml автоматически определяет, что входной файл содержит данные UTF16, и декодирует их в UTF8, что вы получаете от value().