boost::lexical_cast<std::wstring>() как?
От: maggres Россия  
Дата: 01.09.05 14:44
Оценка:
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 это не компилят.
Re: boost::lexical_cast<std::wstring>() как?
От: Glоbus Украина  
Дата: 01.09.05 14:51
Оценка:
Здравствуйте, maggres, Вы писали:


M>Однако ни GCC 3.4.3 ни 4.0.0 это не компилят.


Они вполне справедливо не копилят. Потому что lexical_cast использует чтение/запись в поток для трасформации. А в данном случае он не может применть оператор << для std::wstring чтоб записать ее в обычный поток.
Удачи тебе, браток!
Re[2]: boost::lexical_cast<std::wstring>() как?
От: Adopt  
Дата: 02.09.05 21:24
Оценка:
Здравствуйте, 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>>
Re[3]: boost::lexical_cast<std::wstring>() как?
От: alexeiz  
Дата: 03.09.05 05:59
Оценка:
Здравствуйте, 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++.
Re[3]: boost::lexical_cast<std::wstring>() как?
От: Аноним  
Дата: 03.09.05 06:12
Оценка:
Здравствуйте, Adopt, Вы писали:

A>Здравствуйте, Glоbus, Вы писали:


G>>Здравствуйте, maggres, Вы писали:



M>>>Однако ни GCC 3.4.3 ни 4.0.0 это не компилят.


G>>Они вполне справедливо не копилят. Потому что lexical_cast использует чтение/запись в поток для трасформации. А в данном случае он не может применть оператор << для std::wstring чтоб записать ее в обычный поток.


A>а как тогда совершить подобное преобразование?


Смотреть сюда
wiostream.widen() | wiostream.narrow()
wcstombs()| mbstowcs()
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.