Convert wchar_t* to UTF-16 string

Andrei Baskakov picture Andrei Baskakov · Mar 14, 2012 · Viewed 8.5k times · Source

I need a code in C++ to convert a string given in wchar_t* to a UTF-16 string. It must work both on Windows and Linux. I've looked through a lot of web-pages during the search, but the subject still is not clear to me.

As I understand I need to:

  1. Call setlocale with LC_TYPE and UTF-16 encoding.
  2. Use wcstombs to convert wchar_t to UTF-16 string.
  3. Call setlocale to restore previous locale.

Do you know the way I can convert wchar_t* to UTF-16 in a portable way (Windows and Linux)?

Answer

Nicol Bolas picture Nicol Bolas · Mar 14, 2012

There is no single cross-platform method for doing this in C++03 (not without a library). This is in part because wchar_t is itself not the same thing across platforms. Under Windows, wchar_t is a 16-bit value, while on other platforms it is often a 32-bit value. So you would need two different codepaths to do it.