unicode К ansi
От: Аноним  
Дата: 20.12.10 16:08
Оценка:
Запутался в разных функциях.
Не могли бы подсказать, как правильно приводить UNICODE к ANSI/
Заранее спасибо.
Re: unicode К ansi
От: DarkEld3r  
Дата: 20.12.10 16:23
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Запутался в разных функциях.

А>Не могли бы подсказать, как правильно приводить UNICODE к ANSI/
А>Заранее спасибо.
В виндовс, например, так — CT2A. Смотри "ATL and MFC String Conversion Macros".
Re[2]: unicode К ansi
От: nen777w  
Дата: 20.12.10 16:39
Оценка:
держи
  "string_to_wstring/wstring_to_string"
#ifndef __string_algs_h__
#define __string_algs_h__

#include <locale>
#include <string>
#ifdef WIN
    #include <xstring>
#endif

namespace   string_algs
{
    inline std::wstring string_to_wstring( const char* in, std::locale loc  = std::locale() )
    {
        unsigned int len = (unsigned int) strlen( in );
        std::wstring out( len, 0 );
        const char *i = in, *ie = (in + len);
        std::wstring::iterator j = out.begin();

        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< wchar_t > > ( loc ).widen( *i );

        return out;
    }

    inline std::wstring string_to_wstring( const std::string& in, std::locale loc  = std::locale() )
    {
        std::wstring out( in.length(), 0 );
        std::string::const_iterator i = in.begin(), ie = in.end();
        std::wstring::iterator j = out.begin();

        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< wchar_t > > ( loc ).widen( *i );

        return out;
    }
    
    inline std::string wstring_to_string( const wchar_t* in, std::locale loc = std::locale() )
    {
        unsigned int len = (unsigned int) wcslen( in );
        std::string out( len, 0 );
        const wchar_t *i = in, *ie = (in + len);
        std::string::iterator j = out.begin();
        
        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< char > > ( loc ).widen( *i );
        
        return out;
    }
    
    inline std::string wstring_to_string( const std::wstring& in, std::locale loc = std::locale() )
    {
        std::string out( in.length(), 0 );
        std::wstring::const_iterator i = in.begin(), ie = in.end();
        std::string::iterator j = out.begin();
        
        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< char > > ( loc ).widen( *i );
        
        return out;
    }
}

#endif
Re: unicode К ansi
От: npak Россия  
Дата: 20.12.10 20:58
Оценка: 3 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Запутался в разных функциях.

А>Не могли бы подсказать, как правильно приводить UNICODE к ANSI/
А>Заранее спасибо.

В Windows для этого есть пара функций WideCharToMultiByte и MultiByteToWideChar
Первая функция переводит из UCS-2 (16-битный юникод) в заданную кодовую страницу, список поддерживаемых кодовых страниц здесь: http://msdn.microsoft.com/en-us/library/dd317756.aspx
Вторая функция делает перевод из кодовой страницы в 16-битный юникод.

В Унихах есть библиотека libiconv http://www.gnu.org/software/libiconv/
Re[2]: unicode К ansi
От: Artem.shi  
Дата: 21.12.10 07:05
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

DE>Здравствуйте, Аноним, Вы писали:


А>>Запутался в разных функциях.

А>>Не могли бы подсказать, как правильно приводить UNICODE к ANSI/
А>>Заранее спасибо.
DE>В виндовс, например, так — CT2A. Смотри "ATL and MFC String Conversion Macros".
Класс, спасибо.
Re: unicode К ansi
От: Ops Россия  
Дата: 24.12.10 22:19
Оценка:
"unicode К ansi"
Rodrigo y Gabriella
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: unicode К ansi
От: Pavel Dvorkin Россия  
Дата: 25.12.10 15:57
Оценка:
Здравствуйте, nen777w, Вы писали:

N>держи


М-да

wcstombs, _wcstombs_l

Converts a sequence of wide characters to a corresponding sequence of multibyte characters. More secure versions of these functions are available; see wcstombs_s, _wcstombs_s_l.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.