wstring в string
От: creatman Германия  
Дата: 18.02.08 23:05
Оценка:
подскажите как заставить это корректно конвертировать русские символы?



inline std::string GetMultibyteCharacterString(const std::wstring& in_str)
{
        typedef std::vector<std::string::value_type> mbstr_buf;
        mbstr_buf    buf( ( in_str.size() + 1) * ( sizeof( std::wstring::value_type) /
                                sizeof( std::string::value_type)) );
        wcstombs(     &buf[0],     in_str.c_str(),     in_str.size()    ); 
        return std::string( &buf[0] );
}


Дело в том что у меня в in_str может быть как английский текст так и русский.


Re: wstring в string
От: Sni4ok  
Дата: 19.02.08 09:42
Оценка:
Здравствуйте, creatman, Вы писали:

а зачем вы пишете везде std::string::value_type, или вы действительно верите в то, что когда-нибудь там может
лежать не char ?

C>

C>inline std::string GetMultibyteCharacterString(const std::wstring& in_str)
C>{
C>        typedef std::vector<std::string::value_type> mbstr_buf;
C>        mbstr_buf    buf( ( in_str.size() + 1) * ( sizeof( std::wstring::value_type) /
C>                                sizeof( std::string::value_type)) );
C>        wcstombs(     &buf[0],     in_str.c_str(),     in_str.size()    ); 
C>        return std::string( &buf[0] );
C>}

C>


C>Дело в том что у меня в in_str может быть как английский текст так и русский.
Re[2]: wstring в string
От: creatman Германия  
Дата: 19.02.08 11:16
Оценка:
Здравствуйте, Sni4ok, Вы писали:

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


S>а зачем вы пишете везде std::string::value_type, или вы действительно верите в то, что когда-нибудь там может

S>лежать не char ?

Я думаю если я это заменю на char то ничего не изменится. Но вы действительно правы, а код я не сам писал, скопипастил с какого-то форума. Вопрос остается открытым.


Re[3]: wstring в string
От: Sni4ok  
Дата: 19.02.08 17:43
Оценка:
Здравствуйте, creatman, Вы писали:

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


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


S>>а зачем вы пишете везде std::string::value_type, или вы действительно верите в то, что когда-нибудь там может

S>>лежать не char ?

C>Я думаю если я это заменю на char то ничего не изменится. Но вы действительно правы, а код я не сам писал, скопипастил с какого-то форума. Вопрос остается открытым.


а исходный вопрос не корректен, поскольку вы не оговорились в вопросе в какой кодировке у вас однобайтовая входная строка.
Re[4]: wstring в string
От: creatman Германия  
Дата: 19.02.08 18:14
Оценка:
Здравствуйте, Sni4ok, Вы писали:

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


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


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


S>>>а зачем вы пишете везде std::string::value_type, или вы действительно верите в то, что когда-нибудь там может

S>>>лежать не char ?

C>>Я думаю если я это заменю на char то ничего не изменится. Но вы действительно правы, а код я не сам писал, скопипастил с какого-то форума. Вопрос остается открытым.


S>а исходный вопрос не корректен, поскольку вы не оговорились в вопросе в какой кодировке у вас однобайтовая входная строка.


входная строка не однобайтовая а wchar_t типа, она в кодировке UNICODE, выходную строку типа char нужно получить в UTF8.


Re[5]: wstring в string
От: Аноним  
Дата: 19.02.08 21:10
Оценка:
Здравствуйте, creatman, Вы писали:

[]

C>входная строка не однобайтовая а wchar_t типа, она в кодировке UNICODE, выходную строку типа char нужно получить в UTF8.


WideCharToMultiByte
Re[6]: wstring в string
От: Кодт Россия  
Дата: 19.02.08 21:59
Оценка: 2 (2)
Здравствуйте, Аноним, Вы писали:

А>WideCharToMultiByte

Это WinAPI.
Переносимым решением является setlocale() + wcstombs(), либо использование libiconv.
А вообще, перегнать UTF-16 или UCS-2 в UTF-8 можно вручную, это не требует таблиц кодировок. Вот, кстати, libutf8 этим занимается...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.