Hello Господа,
Пытаюсь сделать такое строковое преобразование:
ASCII => UTF8, для этого делаю так
ASCII=>setlocale()=>wchar_t=>setlocale()=>UTF8
Хочется и кажется логичным сделать так:
#include <iostream>
#include <string>
#include <locale>
#include <boost/lexical_cast.hpp>
int main(int argc, char * argv[])
{
std::string ascii="тестовая строка в KOI8-R";
std::setlocale(LC_ALL,"ru_RU.koi8r");
std::wstring wstr = boost::lexical_cast<std::wstring>(ascii);
std::setlocale(LC_ALL, "ru_RU.utf8");
std::string utf8 = boost::lexical_cast<std::string>(wstr);
return 0;
}
Однако ни GCC 3.4.3 ни 4.0.0 это не компилят.
Здравствуйте, Glоbus, Вы писали:
G>Здравствуйте, maggres, Вы писали:
M>>Однако ни GCC 3.4.3 ни 4.0.0 это не компилят.
G>Они вполне справедливо не копилят. Потому что lexical_cast использует чтение/запись в поток для трасформации. А в данном случае он не может применть оператор << для std::wstring чтоб записать ее в обычный поток.
а как тогда совершить подобное преобразование?
... << RSDN@Home 1.1.4 stable rev. 510>>
Здравствуйте, Adopt, Вы писали:
A>Здравствуйте, Glоbus, Вы писали:
G>>Здравствуйте, maggres, Вы писали:
M>>>Однако ни GCC 3.4.3 ни 4.0.0 это не компилят.
G>>Они вполне справедливо не копилят. Потому что lexical_cast использует чтение/запись в поток для трасформации. А в данном случае он не может применть оператор << для std::wstring чтоб записать ее в обычный поток.
A>а как тогда совершить подобное преобразование?
MultiByteToWideChar. А можно и
стандартными методами (codecvt::in). Удивительно, правда? Блог Windows хакера и die-hard сишника Реймонда — последнее место, где ожидаешь увидеть использование этой забытой богом функции из библиотеки C++.