Набор допущений, нарушение которых приведёт к поломке юникода:
utils_common
utils_smart_ptr
rdo_runtime
rdo_parser
rdo_mbuilder
rdo_procgui
rdo_converter
rdo_kernel
rdo_repository
rdo_corba
rdo_simulator_report
rdo_simulator
rdo
rdo_studio
scintilla
ui_abstract
ui_qt
все юнит-тесты
Пример
В заводим строку с русским содержимом
std::string sstr = "произвольный текст";
Используется библиотекой Qt, на которой основан клиент (rdo_studio). В нём по максимуму лучше использовать QString, чем std::string;
Пример
В клиенте заводим строку с русским содержимом
QString qstr = "произвольный текст";
Пример
Переводим std::string -> QString
QString qstr = QString::fromStdString(sstr);
Пример
Переводим QString -> std::string
std::string sstr = qstr.toStdString();
Используется при общении с файловой системой. std::fstream использовать нельзя. Вместо этого класса надо использовать boost::filesystem::fstream в связке с boost::filesystem::path, которое содержит имя файла. boost::filesystem::path может работать в двух режимах: std::string и std::wstring, но нам нужен только второй. Иначе русские имена файлов обрабатываются неправильно. Отсюда два вывода:
Пример
std::string -> boost::filesystem::path
std::string fileName = "c:\\путь с русскими буквами и пробелами\\имя тоже по русски.rdox";
boost::filesystem::path path = rdo::locale::convertToWStr(fileName);
boost::filesystem::fstream file(path, std::ios::out | std::ios::binary);
или в одну строчку
boost::filesystem::fstream file(rdo::locale::convertToWStr("c:\\путь с русскими буквами и пробелами\\имя тоже по русски.rdox"), std::ios::out | std::ios::binary);
Пример
boost::filesystem::path -> std::string
std::string fileName = rdo::locale::convertFromWStr(path.wstring());
Старый формат РДО-моделей на винте. Головная боль для конвертера. Лексер конвертера умеет их вычитывать, а конвертер сохраняет результат уже в utf-8.
pugixml