C++ Convert string (or char*) to wstring (or wchar_t*)

后端 未结 16 2399
难免孤独
难免孤独 2020-11-22 05:57
string s = \"おはよう\";
wstring ws = FUNCTION(s, ws);

How would i assign the contents of s to ws?

Searched google and used some techniques but

16条回答
  •  长发绾君心
    2020-11-22 06:32

    If you are using Windows/Visual Studio and need to convert a string to wstring you could use:

    #include 
    #include 
    ...
    string s = "some string";
    CA2W ca2w(s.c_str());
    wstring w = ca2w;
    printf("%s = %ls", s.c_str(), w.c_str());
    

    Same procedure for converting a wstring to string (sometimes you will need to specify a codepage):

    #include 
    #include 
    ...
    wstring w = L"some wstring";
    CW2A cw2a(w.c_str());
    string s = cw2a;
    printf("%s = %ls", s.c_str(), w.c_str());
    

    You could specify a codepage and even UTF8 (that's pretty nice when working with JNI/Java). A standard way of converting a std::wstring to utf8 std::string is showed in this answer.

    // 
    // using ATL
    CA2W ca2w(str, CP_UTF8);
    
    // 
    // or the standard way taken from the answer above
    #include 
    #include 
    
    // convert UTF-8 string to wstring
    std::wstring utf8_to_wstring (const std::string& str) {
        std::wstring_convert> myconv;
        return myconv.from_bytes(str);
    }
    
    // convert wstring to UTF-8 string
    std::string wstring_to_utf8 (const std::wstring& str) {
        std::wstring_convert> myconv;
        return myconv.to_bytes(str);
    }
    

    If you want to know more about codepages there is an interesting article on Joel on Software: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets.

    These CA2W (Convert Ansi to Wide=unicode) macros are part of ATL and MFC String Conversion Macros, samples included.

    Sometimes you will need to disable the security warning #4995', I don't know of other workaround (to me it happen when I compiled for WindowsXp in VS2012).

    #pragma warning(push)
    #pragma warning(disable: 4995)
    #include 
    #include 
    #pragma warning(pop)
    

    Edit: Well, according to this article the article by Joel appears to be: "while entertaining, it is pretty light on actual technical details". Article: What Every Programmer Absolutely, Positively Needs To Know About Encoding And Character Sets To Work With Text.

提交回复
热议问题