将wchar_t*转换为UTF-16字符串

And*_*kov 5 c c++ unicode wchar-t utf-16

我需要一个C++代码来将给定的字符串转换wchar_t*为UTF-16字符串.它必须适用于Windows和Linux.我在搜索过程中浏览了很多网页,但这个主题对我来说仍然不清楚.

据我所知,我需要:

  1. setlocale使用LC_TYPE和UTF-16编码进行呼叫.
  2. 使用wcstombs转换wchar_t为UTF-16字符串.
  3. 调用setlocale以恢复以前的区域设置.

你知道我可以wchar_t*以便携方式(Windows和Linux)转换为UTF-16的方式吗?

Nic*_*las 8

在C++ 03中没有单一的跨平台方法(不是没有库).这部分是因为wchar_t跨平台本身并不是一回事.在Windows下,wchar_t是16位值,而在其他平台上,它通常是32位值.所以你需要两个不同的代码路径来完成它.


Pub*_*bby 5

std::codecvt_utf16我认为C++ 11 应该可行.

std :: codecvt_utf16是一个std :: codecvt facet,它封装了UTF-16编码的字节串和UCS2或UCS4字符串之间的转换(取决于Elem的类型).

请参阅:http://en.cppreference.com/w/cpp/locale/codecvt_utf16