Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > запись русских символов


Автор: Dronchik 15.11.2009, 06:37
Приветствую форумчан) Сейчас работаю над программой, в которой используется запись и чтение xml-файла. Для записи и чтения xml-файла используется функции игрового движка Irrlicht(IrrXML называется, как ни странно). Проблема заключается в том, что IrrXML не записывает в xml-файл русские буквы(вместо них квадраты при открытии этого файла в блокноте). С английскими буквами, цифрами всё в порядке - и пишется, и читается файл стабильно. Есть подозрение, что придётся транслитерировать русские буквы в английские аналоги и при чтении файла проводить обратную операцию. Есть ли более оптимальный способ? 
Код

core::array<core::stringw> names=0;
core::array<core::stringw> values=0;
//...
for(int i=0; Task[i].bFull!=false; i++)
        {
            names.push_back(core::stringw(L"Name"));        
            values.push_back(core::stringw(Task[i].strName));//Task[i].strName может содержать как английские буквы, так и русские
                //...
                        buffer=_itow(i, buffer2, 10);
                        //параметры функции writeElement: название поля в xml-файле, пустое ли поле, название параметра, его значение
            xml->writeElement(buffer, false, names, values);                        
            xml->writeClosingTag(buffer); 
            xml->writeLineBreak();
            names.clear();
            values.clear();
        }

http://www.ambiera.com/irrxml/index.html

Автор: Andrey44 16.11.2009, 08:16
Кодировка самого xml-файла какая?

Автор: mrbrooks 16.11.2009, 09:03
вдогонку скажу что первой строкой для отображения русского текста д.б. типа этого:

Цитата

<?xml version="1.0" encoding="UTF-8" ?> 

то бишь наш любимый юникод.

Цитата(Dronchik @  15.11.2009,  06:37 Найти цитируемый пост)
Для записи и чтения xml-файла используется функции игрового движка Irrlicht(IrrXML называется, как ни странно). 

Это сущая необходимость, или есть возможность использовать более известные врапперы?

Автор: Dronchik 16.11.2009, 09:51
Andrey44, кодировка UTF-16.
mrbrooks, нет, такой необходимости нет. Я чисто по привычке использования этого враппера его и взял, даже не задумываясь о других врапперах, так как этот меня вполне устраивал до обнаружения этой проблемы. Пойду гуглить насчёт других xml-врапперов. Конечно, если вас не затруднит, могли бы посоветовать какой-либо из известных, так как ни с какими более, кроме IrrXML, я не знаком вообще.

Автор: xvr 16.11.2009, 16:39
Какой тип у Task[i].strName?

Автор: Dronchik 16.11.2009, 17:41
xvr, массив переменных типа char 
Код

char strName[100];

Автор: xvr 16.11.2009, 20:12
Цитата(Dronchik @ 16.11.2009,  17:41)
xvr, массив переменных типа char 
Код

char strName[100];

Тогда надо смотреть на конструктор core::stringw(char*), в частости на то, где (и как) ему надо выставить локаль для символов.
Ну и поставить там эту самую локаль (в CP1251)

Автор: GremlinProg 18.11.2009, 08:42

M
GremlinProg
Тема перемещена из раздела C/C++: Системное программирование и WinAPI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)