How to convert wstring into string?

前端 未结 17 1984
北海茫月
北海茫月 2020-11-22 13:10

The question is how to convert wstring to string?

I have next example :

#include 
#include 

int main()
{
    std::wstr         


        
17条回答
  •  忘了有多久
    2020-11-22 13:24

    I spent many sad days trying to come up with a way to do this for C++17, which deprecated code_cvt facets, and this is the best I was able to come up with by combining code from a few different sources:

    setlocale( LC_ALL, "en_US.UTF-8" ); //Invoked in main()
    
    std::string wideToMultiByte( std::wstring const & wideString )
    {
         std::string ret;
         std::string buff( MB_CUR_MAX, '\0' );
    
         for ( wchar_t const & wc : wideString )
         {
             int mbCharLen = std::wctomb( &buff[ 0 ], wc );
    
             if ( mbCharLen < 1 ) { break; }
    
             for ( int i = 0; i < mbCharLen; ++i ) 
             { 
                 ret += buff[ i ]; 
             }
         }
    
         return ret;
     }
    
     std::wstring multiByteToWide( std::string const & multiByteString )
     {
         std::wstring ws( multiByteString.size(), L' ' );
         ws.resize( 
             std::mbstowcs( &ws[ 0 ], 
                 multiByteString.c_str(), 
                 multiByteString.size() ) );
    
         return ws;
     }
    

    I tested this code on Windows 10, and at least for my purposes, it seems to work fine. Please don't lynch me if this doesn't consider some crazy edge cases that you might need to handle, I'm sure someone with more experience can improve on this! :-)

    Also, credit where it's due:

    Adapted for wideToMultiByte()

    Copied for multiByteToWide

提交回复
热议问题