В каком формате Юникода я передаю функции tinyxml, которые принимают char *? - PullRequest
1 голос
/ 31 марта 2012

Когда я вызываю функцию tinyxml, которая принимает символ *, в каком формате Юникода мне нужно передать его?

TiXmlText *element_text = new TiXmlText(string);

Причина в том, что я использую объект wxString, и я могу дать ему много разных кодировок. Если я просто сделаю string.c_str (), объект wxstring запросит кодировку для текущей локали и создаст строку char * в этом формате. Или, если я сделаю string.utf8_str (), он пропустит строку utf-8, но похоже, что tinyxml не поймет, что он уже закодирован в utf-8, и перекодирует строку utf-8 как utf-8 (да, результат двойная кодировка utf-8). Поэтому, когда я пишу, если я установлю notepad ++ для показа utf-8, я вижу:

baŸŸlam вместо bağlam.

Я бы хотел сам выполнить кодировку в utf_8 (string.utf8_str ()), чтобы не прикасаться к ней tinyxml и просто записать ее.

Как мне это сделать? В каком формате tinyxml ожидает передачи в параметре функции (конструктор в приведенном выше коде)? Ответ от тестирования не utf-8, хотя в конечном итоге он записывается как utf-8, если это имеет смысл.

Ответы [ 2 ]

1 голос
/ 31 марта 2012

TinyXML поддерживает только кодировку UTF-8.Поэтому, если вы хотите предоставить символы за пределами ASCII, вы должны предоставить их в UTF-8.

0 голосов
/ 31 марта 2012

Вы можете посмотреть этот раздел на http://www.grinninglizard.com/tinyxmldocs/index.html

TinyXML может быть скомпилирован для использования или не использования STL. При использовании STL TinyXML использует класс std :: string и полностью поддерживает std :: istream, std :: ostream, operator << и operator >>. Многие методы API имеют формы const char * и const std :: string &.

Когда поддержка STL компилируется, файлы STL вообще не включаются. Все строковые классы реализованы самим TinyXML. Все методы API используют для ввода форму «const char *».

Используйте время компиляции, определяющее TIXML_USE_STL, для компиляции одной или другой версии. Это может быть передано компилятором или установлено в качестве первой строки "tinyxml.h".

...