Доброго времени суток. Способов несколько знаю, вот к примеру:
std::string str("abcdefg");
std::wstring output(str.begin(), str.end());
Но проблема становится ребром, если в экземпляре класса str используются русские символы. output создаётся не с теми символами, что были в str. Как победить проблему? Заранее спасибо.
P.S.: вопрос короткий, не относящийся к главному: под сколько элементов по-умолчанию выделяет класс vector память. Если использовать его конструктор по-умолчанию? Спасибо.
Ответ
Если кодировка CP1251, то как-то так:
#include
// "костыль", чтобы наш codecvt имел публичный деструктор,
// как того требует wstring_convert
template
// собственно определяем "конвертер" из узкой в широкую строку и обратно
using convert_type = std::codecvt
int main() {
std::string s = "йцукен";
// string в wstring
std::wstring ws = converter.from_bytes(str);
// обратное преобразование
std::string ss = converter.to_bytes(wstr);
}
Для UTF-8 нужно только по другому определить convert_type и (опционально) converter
using convert_type = std::codecvt_utf8
То есть в случае, если вы используете предопределенный codecvt_*, можно опустить использование deletable_facet
Документация, на которую я ориентировался.
Комментариев нет:
Отправить комментарий