If you want to send Unicode data across platforms and architectures, I would suggest using UTF-8 encoding and (8-bit) char s. UTF-8 has some advantages, such as the absence of problems with endiannes (UTF-8 is just a simple sequence of bytes, instead UTF-16 and UTF-32 can be low-north or big-endian ...).
On Windows, just convert the text of UTF-8 to UTF-16 on the border of the Win32 API (since the Windows APIs work with UTF-16). You can use the MultiByteToWideChar() API to do this.
source share